{
  "version": 3,
  "sources": ["../../node_modules/sweetalert2/dist/sweetalert2.all.js", "../../node_modules/@alpinejs/anchor/dist/module.esm.js", "../../node_modules/alpinejs/dist/module.esm.js", "../../staticSrc/js/main.js", "../../staticSrc/js/components/bulk-add-timeentries.js", "../../node_modules/@kurkle/color/dist/color.esm.js", "../../node_modules/chart.js/src/helpers/helpers.core.ts", "../../node_modules/chart.js/src/helpers/helpers.math.ts", "../../node_modules/chart.js/src/helpers/helpers.collection.ts", "../../node_modules/chart.js/src/helpers/helpers.extras.ts", "../../node_modules/chart.js/src/helpers/helpers.easing.ts", "../../node_modules/chart.js/src/helpers/helpers.color.ts", "../../node_modules/chart.js/src/core/core.animations.defaults.js", "../../node_modules/chart.js/src/core/core.layouts.defaults.js", "../../node_modules/chart.js/src/helpers/helpers.intl.ts", "../../node_modules/chart.js/src/core/core.ticks.js", "../../node_modules/chart.js/src/core/core.scale.defaults.js", "../../node_modules/chart.js/src/core/core.defaults.js", "../../node_modules/chart.js/src/helpers/helpers.canvas.ts", "../../node_modules/chart.js/src/helpers/helpers.options.ts", "../../node_modules/chart.js/src/helpers/helpers.config.ts", "../../node_modules/chart.js/src/helpers/helpers.curve.ts", "../../node_modules/chart.js/src/helpers/helpers.dom.ts", "../../node_modules/chart.js/src/helpers/helpers.interpolation.ts", "../../node_modules/chart.js/src/helpers/helpers.rtl.ts", "../../node_modules/chart.js/src/helpers/helpers.segment.js", "../../node_modules/chart.js/src/helpers/helpers.dataset.ts", "../../node_modules/chart.js/src/core/core.animator.js", "../../node_modules/chart.js/src/core/core.animation.js", "../../node_modules/chart.js/src/core/core.animations.js", "../../node_modules/chart.js/src/core/core.datasetController.js", "../../node_modules/chart.js/src/controllers/controller.bar.js", "../../node_modules/chart.js/src/controllers/controller.bubble.js", "../../node_modules/chart.js/src/controllers/controller.doughnut.js", "../../node_modules/chart.js/src/controllers/controller.line.js", "../../node_modules/chart.js/src/controllers/controller.polarArea.js", "../../node_modules/chart.js/src/controllers/controller.pie.js", "../../node_modules/chart.js/src/controllers/controller.radar.js", "../../node_modules/chart.js/src/controllers/controller.scatter.js", "../../node_modules/chart.js/src/core/core.adapters.ts", "../../node_modules/chart.js/src/core/core.interaction.js", "../../node_modules/chart.js/src/core/core.layouts.js", "../../node_modules/chart.js/src/platform/platform.base.js", "../../node_modules/chart.js/src/platform/platform.basic.js", "../../node_modules/chart.js/src/platform/platform.dom.js", "../../node_modules/chart.js/src/platform/index.js", "../../node_modules/chart.js/src/core/core.element.ts", "../../node_modules/chart.js/src/core/core.scale.autoskip.js", "../../node_modules/chart.js/src/core/core.scale.js", "../../node_modules/chart.js/src/core/core.typedRegistry.js", "../../node_modules/chart.js/src/core/core.registry.js", "../../node_modules/chart.js/src/core/core.plugins.js", "../../node_modules/chart.js/src/core/core.config.js", "../../node_modules/chart.js/src/core/core.controller.js", "../../node_modules/chart.js/src/elements/element.arc.ts", "../../node_modules/chart.js/src/elements/element.line.js", "../../node_modules/chart.js/src/elements/element.point.ts", "../../node_modules/chart.js/src/elements/element.bar.js", "../../node_modules/chart.js/src/plugins/plugin.colors.ts", "../../node_modules/chart.js/src/plugins/plugin.decimation.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.segment.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.helper.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.options.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.stack.js", "../../node_modules/chart.js/src/plugins/plugin.filler/simpleArc.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.drawing.js", "../../node_modules/chart.js/src/plugins/plugin.filler/index.js", "../../node_modules/chart.js/src/plugins/plugin.legend.js", "../../node_modules/chart.js/src/plugins/plugin.title.js", "../../node_modules/chart.js/src/plugins/plugin.subtitle.js", "../../node_modules/chart.js/src/plugins/plugin.tooltip.js", "../../node_modules/chart.js/src/scales/scale.category.js", "../../node_modules/chart.js/src/scales/scale.linearbase.js", "../../node_modules/chart.js/src/scales/scale.linear.js", "../../node_modules/chart.js/src/scales/scale.logarithmic.js", "../../node_modules/chart.js/src/scales/scale.radialLinear.js", "../../node_modules/chart.js/src/scales/scale.time.js", "../../node_modules/chart.js/src/scales/scale.timeseries.js", "../../node_modules/chart.js/src/index.ts", "../../node_modules/chart.js/auto/auto.js", "../../staticSrc/js/components/chart.js", "../../staticSrc/js/components/clock.js", "../../staticSrc/js/components/company-logo-upload-preview.js", "../../staticSrc/js/components/confirm-btn.js", "../../staticSrc/js/components/daily-timeline.js", "../../node_modules/.pnpm/flatpickr@4.6.13/node_modules/flatpickr/dist/esm/types/options.js", "../../node_modules/.pnpm/flatpickr@4.6.13/node_modules/flatpickr/dist/esm/l10n/default.js", "../../node_modules/.pnpm/flatpickr@4.6.13/node_modules/flatpickr/dist/esm/utils/index.js", "../../node_modules/.pnpm/flatpickr@4.6.13/node_modules/flatpickr/dist/esm/utils/dom.js", "../../node_modules/.pnpm/flatpickr@4.6.13/node_modules/flatpickr/dist/esm/utils/formatting.js", "../../node_modules/.pnpm/flatpickr@4.6.13/node_modules/flatpickr/dist/esm/utils/dates.js", "../../node_modules/.pnpm/flatpickr@4.6.13/node_modules/flatpickr/dist/esm/utils/polyfills.js", "../../node_modules/.pnpm/flatpickr@4.6.13/node_modules/flatpickr/dist/esm/index.js", "../../staticSrc/js/components/datetime-picker.js", "../../node_modules/decimal.js/decimal.mjs", "../../staticSrc/js/utils.js", "../../staticSrc/js/components/document-form.js", "../../staticSrc/js/components/documents/document-form-line-item-selector.js", "../../staticSrc/js/components/documents/document-list.js", "../../staticSrc/js/components/documents/select-time-entries-line-items.js", "../../staticSrc/js/components/importTimeEntriesModal.js", "../../staticSrc/js/components/invoice-form.js", "../../staticSrc/js/components/modal.js", "../../node_modules/@paddle/paddle-js/dist/index.esm.js", "../../staticSrc/js/components/paddle-checkout.js", "../../staticSrc/js/components/project-time-entries.js", "../../staticSrc/js/components/switch-btn.js", "../../staticSrc/js/components/task-form.js", "../../staticSrc/js/components/timesheet.js", "../../staticSrc/js/components/timesheet-date-picker.js", "../../staticSrc/js/components/timesheets-form.js"],
  "sourcesContent": ["/*!\n* sweetalert2 v11.23.0\n* Released under the MIT 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.Sweetalert2 = factory());\n})(this, (function () { 'use strict';\n\n  function _assertClassBrand(e, t, n) {\n    if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n    throw new TypeError(\"Private element is not present on this object\");\n  }\n  function _checkPrivateRedeclaration(e, t) {\n    if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n  }\n  function _classPrivateFieldGet2(s, a) {\n    return s.get(_assertClassBrand(s, a));\n  }\n  function _classPrivateFieldInitSpec(e, t, a) {\n    _checkPrivateRedeclaration(e, t), t.set(e, a);\n  }\n  function _classPrivateFieldSet2(s, a, r) {\n    return s.set(_assertClassBrand(s, a), r), r;\n  }\n\n  const RESTORE_FOCUS_TIMEOUT = 100;\n\n  /** @type {GlobalState} */\n  const globalState = {};\n  const focusPreviousActiveElement = () => {\n    if (globalState.previousActiveElement instanceof HTMLElement) {\n      globalState.previousActiveElement.focus();\n      globalState.previousActiveElement = null;\n    } else if (document.body) {\n      document.body.focus();\n    }\n  };\n\n  /**\n   * Restore previous active (focused) element\n   *\n   * @param {boolean} returnFocus\n   * @returns {Promise<void>}\n   */\n  const restoreActiveElement = returnFocus => {\n    return new Promise(resolve => {\n      if (!returnFocus) {\n        return resolve();\n      }\n      const x = window.scrollX;\n      const y = window.scrollY;\n      globalState.restoreFocusTimeout = setTimeout(() => {\n        focusPreviousActiveElement();\n        resolve();\n      }, RESTORE_FOCUS_TIMEOUT); // issues/900\n\n      window.scrollTo(x, y);\n    });\n  };\n\n  const swalPrefix = 'swal2-';\n\n  /**\n   * @typedef {Record<SwalClass, string>} SwalClasses\n   */\n\n  /**\n   * @typedef {'success' | 'warning' | 'info' | 'question' | 'error'} SwalIcon\n   * @typedef {Record<SwalIcon, string>} SwalIcons\n   */\n\n  /** @type {SwalClass[]} */\n  const classNames = ['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error', 'draggable', 'dragging'];\n  const swalClasses = classNames.reduce((acc, className) => {\n    acc[className] = swalPrefix + className;\n    return acc;\n  }, /** @type {SwalClasses} */{});\n\n  /** @type {SwalIcon[]} */\n  const icons = ['success', 'warning', 'info', 'question', 'error'];\n  const iconTypes = icons.reduce((acc, icon) => {\n    acc[icon] = swalPrefix + icon;\n    return acc;\n  }, /** @type {SwalIcons} */{});\n\n  const consolePrefix = 'SweetAlert2:';\n\n  /**\n   * Capitalize the first letter of a string\n   *\n   * @param {string} str\n   * @returns {string}\n   */\n  const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1);\n\n  /**\n   * Standardize console warnings\n   *\n   * @param {string | string[]} message\n   */\n  const warn = message => {\n    console.warn(`${consolePrefix} ${typeof message === 'object' ? message.join(' ') : message}`);\n  };\n\n  /**\n   * Standardize console errors\n   *\n   * @param {string} message\n   */\n  const error = message => {\n    console.error(`${consolePrefix} ${message}`);\n  };\n\n  /**\n   * Private global state for `warnOnce`\n   *\n   * @type {string[]}\n   * @private\n   */\n  const previousWarnOnceMessages = [];\n\n  /**\n   * Show a console warning, but only if it hasn't already been shown\n   *\n   * @param {string} message\n   */\n  const warnOnce = message => {\n    if (!previousWarnOnceMessages.includes(message)) {\n      previousWarnOnceMessages.push(message);\n      warn(message);\n    }\n  };\n\n  /**\n   * Show a one-time console warning about deprecated params/methods\n   *\n   * @param {string} deprecatedParam\n   * @param {string?} useInstead\n   */\n  const warnAboutDeprecation = (deprecatedParam, useInstead = null) => {\n    warnOnce(`\"${deprecatedParam}\" is deprecated and will be removed in the next major release.${useInstead ? ` Use \"${useInstead}\" instead.` : ''}`);\n  };\n\n  /**\n   * If `arg` is a function, call it (with no arguments or context) and return the result.\n   * Otherwise, just pass the value through\n   *\n   * @param {Function | any} arg\n   * @returns {any}\n   */\n  const callIfFunction = arg => typeof arg === 'function' ? arg() : arg;\n\n  /**\n   * @param {any} arg\n   * @returns {boolean}\n   */\n  const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function';\n\n  /**\n   * @param {any} arg\n   * @returns {Promise<any>}\n   */\n  const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);\n\n  /**\n   * @param {any} arg\n   * @returns {boolean}\n   */\n  const isPromise = arg => arg && Promise.resolve(arg) === arg;\n\n  /**\n   * Gets the popup container which contains the backdrop and the popup itself.\n   *\n   * @returns {HTMLElement | null}\n   */\n  const getContainer = () => document.body.querySelector(`.${swalClasses.container}`);\n\n  /**\n   * @param {string} selectorString\n   * @returns {HTMLElement | null}\n   */\n  const elementBySelector = selectorString => {\n    const container = getContainer();\n    return container ? container.querySelector(selectorString) : null;\n  };\n\n  /**\n   * @param {string} className\n   * @returns {HTMLElement | null}\n   */\n  const elementByClass = className => {\n    return elementBySelector(`.${className}`);\n  };\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getPopup = () => elementByClass(swalClasses.popup);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getIcon = () => elementByClass(swalClasses.icon);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getIconContent = () => elementByClass(swalClasses['icon-content']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getTitle = () => elementByClass(swalClasses.title);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getHtmlContainer = () => elementByClass(swalClasses['html-container']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getImage = () => elementByClass(swalClasses.image);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getProgressSteps = () => elementByClass(swalClasses['progress-steps']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getValidationMessage = () => elementByClass(swalClasses['validation-message']);\n\n  /**\n   * @returns {HTMLButtonElement | null}\n   */\n  const getConfirmButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.confirm}`));\n\n  /**\n   * @returns {HTMLButtonElement | null}\n   */\n  const getCancelButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.cancel}`));\n\n  /**\n   * @returns {HTMLButtonElement | null}\n   */\n  const getDenyButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.deny}`));\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getInputLabel = () => elementByClass(swalClasses['input-label']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getLoader = () => elementBySelector(`.${swalClasses.loader}`);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getActions = () => elementByClass(swalClasses.actions);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getFooter = () => elementByClass(swalClasses.footer);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getCloseButton = () => elementByClass(swalClasses.close);\n\n  // https://github.com/jkup/focusable/blob/master/index.js\n  const focusable = `\n  a[href],\n  area[href],\n  input:not([disabled]),\n  select:not([disabled]),\n  textarea:not([disabled]),\n  button:not([disabled]),\n  iframe,\n  object,\n  embed,\n  [tabindex=\"0\"],\n  [contenteditable],\n  audio[controls],\n  video[controls],\n  summary\n`;\n  /**\n   * @returns {HTMLElement[]}\n   */\n  const getFocusableElements = () => {\n    const popup = getPopup();\n    if (!popup) {\n      return [];\n    }\n    /** @type {NodeListOf<HTMLElement>} */\n    const focusableElementsWithTabindex = popup.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])');\n    const focusableElementsWithTabindexSorted = Array.from(focusableElementsWithTabindex)\n    // sort according to tabindex\n    .sort((a, b) => {\n      const tabindexA = parseInt(a.getAttribute('tabindex') || '0');\n      const tabindexB = parseInt(b.getAttribute('tabindex') || '0');\n      if (tabindexA > tabindexB) {\n        return 1;\n      } else if (tabindexA < tabindexB) {\n        return -1;\n      }\n      return 0;\n    });\n\n    /** @type {NodeListOf<HTMLElement>} */\n    const otherFocusableElements = popup.querySelectorAll(focusable);\n    const otherFocusableElementsFiltered = Array.from(otherFocusableElements).filter(el => el.getAttribute('tabindex') !== '-1');\n    return [...new Set(focusableElementsWithTabindexSorted.concat(otherFocusableElementsFiltered))].filter(el => isVisible$1(el));\n  };\n\n  /**\n   * @returns {boolean}\n   */\n  const isModal = () => {\n    return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']);\n  };\n\n  /**\n   * @returns {boolean}\n   */\n  const isToast = () => {\n    const popup = getPopup();\n    if (!popup) {\n      return false;\n    }\n    return hasClass(popup, swalClasses.toast);\n  };\n\n  /**\n   * @returns {boolean}\n   */\n  const isLoading = () => {\n    const popup = getPopup();\n    if (!popup) {\n      return false;\n    }\n    return popup.hasAttribute('data-loading');\n  };\n\n  /**\n   * Securely set innerHTML of an element\n   * https://github.com/sweetalert2/sweetalert2/issues/1926\n   *\n   * @param {HTMLElement} elem\n   * @param {string} html\n   */\n  const setInnerHtml = (elem, html) => {\n    elem.textContent = '';\n    if (html) {\n      const parser = new DOMParser();\n      const parsed = parser.parseFromString(html, `text/html`);\n      const head = parsed.querySelector('head');\n      if (head) {\n        Array.from(head.childNodes).forEach(child => {\n          elem.appendChild(child);\n        });\n      }\n      const body = parsed.querySelector('body');\n      if (body) {\n        Array.from(body.childNodes).forEach(child => {\n          if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) {\n            elem.appendChild(child.cloneNode(true)); // https://github.com/sweetalert2/sweetalert2/issues/2507\n          } else {\n            elem.appendChild(child);\n          }\n        });\n      }\n    }\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {string} className\n   * @returns {boolean}\n   */\n  const hasClass = (elem, className) => {\n    if (!className) {\n      return false;\n    }\n    const classList = className.split(/\\s+/);\n    for (let i = 0; i < classList.length; i++) {\n      if (!elem.classList.contains(classList[i])) {\n        return false;\n      }\n    }\n    return true;\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {SweetAlertOptions} params\n   */\n  const removeCustomClasses = (elem, params) => {\n    Array.from(elem.classList).forEach(className => {\n      if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass || {}).includes(className)) {\n        elem.classList.remove(className);\n      }\n    });\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {SweetAlertOptions} params\n   * @param {string} className\n   */\n  const applyCustomClass = (elem, params, className) => {\n    removeCustomClasses(elem, params);\n    if (!params.customClass) {\n      return;\n    }\n    const customClass = params.customClass[(/** @type {keyof SweetAlertCustomClass} */className)];\n    if (!customClass) {\n      return;\n    }\n    if (typeof customClass !== 'string' && !customClass.forEach) {\n      warn(`Invalid type of customClass.${className}! Expected string or iterable object, got \"${typeof customClass}\"`);\n      return;\n    }\n    addClass(elem, customClass);\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {import('./renderers/renderInput').InputClass | SweetAlertInput} inputClass\n   * @returns {HTMLInputElement | null}\n   */\n  const getInput$1 = (popup, inputClass) => {\n    if (!inputClass) {\n      return null;\n    }\n    switch (inputClass) {\n      case 'select':\n      case 'textarea':\n      case 'file':\n        return popup.querySelector(`.${swalClasses.popup} > .${swalClasses[inputClass]}`);\n      case 'checkbox':\n        return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.checkbox} input`);\n      case 'radio':\n        return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:checked`) || popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:first-child`);\n      case 'range':\n        return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.range} input`);\n      default:\n        return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.input}`);\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input\n   */\n  const focusInput = input => {\n    input.focus();\n\n    // place cursor at end of text in text input\n    if (input.type !== 'file') {\n      // http://stackoverflow.com/a/2345915\n      const val = input.value;\n      input.value = '';\n      input.value = val;\n    }\n  };\n\n  /**\n   * @param {HTMLElement | HTMLElement[] | null} target\n   * @param {string | string[] | readonly string[] | undefined} classList\n   * @param {boolean} condition\n   */\n  const toggleClass = (target, classList, condition) => {\n    if (!target || !classList) {\n      return;\n    }\n    if (typeof classList === 'string') {\n      classList = classList.split(/\\s+/).filter(Boolean);\n    }\n    classList.forEach(className => {\n      if (Array.isArray(target)) {\n        target.forEach(elem => {\n          if (condition) {\n            elem.classList.add(className);\n          } else {\n            elem.classList.remove(className);\n          }\n        });\n      } else {\n        if (condition) {\n          target.classList.add(className);\n        } else {\n          target.classList.remove(className);\n        }\n      }\n    });\n  };\n\n  /**\n   * @param {HTMLElement | HTMLElement[] | null} target\n   * @param {string | string[] | readonly string[] | undefined} classList\n   */\n  const addClass = (target, classList) => {\n    toggleClass(target, classList, true);\n  };\n\n  /**\n   * @param {HTMLElement | HTMLElement[] | null} target\n   * @param {string | string[] | readonly string[] | undefined} classList\n   */\n  const removeClass = (target, classList) => {\n    toggleClass(target, classList, false);\n  };\n\n  /**\n   * Get direct child of an element by class name\n   *\n   * @param {HTMLElement} elem\n   * @param {string} className\n   * @returns {HTMLElement | undefined}\n   */\n  const getDirectChildByClass = (elem, className) => {\n    const children = Array.from(elem.children);\n    for (let i = 0; i < children.length; i++) {\n      const child = children[i];\n      if (child instanceof HTMLElement && hasClass(child, className)) {\n        return child;\n      }\n    }\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {string} property\n   * @param {*} value\n   */\n  const applyNumericalStyle = (elem, property, value) => {\n    if (value === `${parseInt(value)}`) {\n      value = parseInt(value);\n    }\n    if (value || parseInt(value) === 0) {\n      elem.style.setProperty(property, typeof value === 'number' ? `${value}px` : value);\n    } else {\n      elem.style.removeProperty(property);\n    }\n  };\n\n  /**\n   * @param {HTMLElement | null} elem\n   * @param {string} display\n   */\n  const show = (elem, display = 'flex') => {\n    if (!elem) {\n      return;\n    }\n    elem.style.display = display;\n  };\n\n  /**\n   * @param {HTMLElement | null} elem\n   */\n  const hide = elem => {\n    if (!elem) {\n      return;\n    }\n    elem.style.display = 'none';\n  };\n\n  /**\n   * @param {HTMLElement | null} elem\n   * @param {string} display\n   */\n  const showWhenInnerHtmlPresent = (elem, display = 'block') => {\n    if (!elem) {\n      return;\n    }\n    new MutationObserver(() => {\n      toggle(elem, elem.innerHTML, display);\n    }).observe(elem, {\n      childList: true,\n      subtree: true\n    });\n  };\n\n  /**\n   * @param {HTMLElement} parent\n   * @param {string} selector\n   * @param {string} property\n   * @param {string} value\n   */\n  const setStyle = (parent, selector, property, value) => {\n    /** @type {HTMLElement | null} */\n    const el = parent.querySelector(selector);\n    if (el) {\n      el.style.setProperty(property, value);\n    }\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {any} condition\n   * @param {string} display\n   */\n  const toggle = (elem, condition, display = 'flex') => {\n    if (condition) {\n      show(elem, display);\n    } else {\n      hide(elem);\n    }\n  };\n\n  /**\n   * borrowed from jquery $(elem).is(':visible') implementation\n   *\n   * @param {HTMLElement | null} elem\n   * @returns {boolean}\n   */\n  const isVisible$1 = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));\n\n  /**\n   * @returns {boolean}\n   */\n  const allButtonsAreHidden = () => !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton());\n\n  /**\n   * @param {HTMLElement} elem\n   * @returns {boolean}\n   */\n  const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight);\n\n  /**\n   * @param {HTMLElement} element\n   * @param {HTMLElement} stopElement\n   * @returns {boolean}\n   */\n  const selfOrParentIsScrollable = (element, stopElement) => {\n    let parent = element;\n    while (parent && parent !== stopElement) {\n      if (isScrollable(parent)) {\n        return true;\n      }\n      parent = parent.parentElement;\n    }\n    return false;\n  };\n\n  /**\n   * borrowed from https://stackoverflow.com/a/46352119\n   *\n   * @param {HTMLElement} elem\n   * @returns {boolean}\n   */\n  const hasCssAnimation = elem => {\n    const style = window.getComputedStyle(elem);\n    const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');\n    const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');\n    return animDuration > 0 || transDuration > 0;\n  };\n\n  /**\n   * @param {number} timer\n   * @param {boolean} reset\n   */\n  const animateTimerProgressBar = (timer, reset = false) => {\n    const timerProgressBar = getTimerProgressBar();\n    if (!timerProgressBar) {\n      return;\n    }\n    if (isVisible$1(timerProgressBar)) {\n      if (reset) {\n        timerProgressBar.style.transition = 'none';\n        timerProgressBar.style.width = '100%';\n      }\n      setTimeout(() => {\n        timerProgressBar.style.transition = `width ${timer / 1000}s linear`;\n        timerProgressBar.style.width = '0%';\n      }, 10);\n    }\n  };\n  const stopTimerProgressBar = () => {\n    const timerProgressBar = getTimerProgressBar();\n    if (!timerProgressBar) {\n      return;\n    }\n    const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n    timerProgressBar.style.removeProperty('transition');\n    timerProgressBar.style.width = '100%';\n    const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n    const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;\n    timerProgressBar.style.width = `${timerProgressBarPercent}%`;\n  };\n\n  /**\n   * Detect Node env\n   *\n   * @returns {boolean}\n   */\n  const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined';\n\n  const sweetHTML = `\n <div aria-labelledby=\"${swalClasses.title}\" aria-describedby=\"${swalClasses['html-container']}\" class=\"${swalClasses.popup}\" tabindex=\"-1\">\n   <button type=\"button\" class=\"${swalClasses.close}\"></button>\n   <ul class=\"${swalClasses['progress-steps']}\"></ul>\n   <div class=\"${swalClasses.icon}\"></div>\n   <img class=\"${swalClasses.image}\" />\n   <h2 class=\"${swalClasses.title}\" id=\"${swalClasses.title}\"></h2>\n   <div class=\"${swalClasses['html-container']}\" id=\"${swalClasses['html-container']}\"></div>\n   <input class=\"${swalClasses.input}\" id=\"${swalClasses.input}\" />\n   <input type=\"file\" class=\"${swalClasses.file}\" />\n   <div class=\"${swalClasses.range}\">\n     <input type=\"range\" />\n     <output></output>\n   </div>\n   <select class=\"${swalClasses.select}\" id=\"${swalClasses.select}\"></select>\n   <div class=\"${swalClasses.radio}\"></div>\n   <label class=\"${swalClasses.checkbox}\">\n     <input type=\"checkbox\" id=\"${swalClasses.checkbox}\" />\n     <span class=\"${swalClasses.label}\"></span>\n   </label>\n   <textarea class=\"${swalClasses.textarea}\" id=\"${swalClasses.textarea}\"></textarea>\n   <div class=\"${swalClasses['validation-message']}\" id=\"${swalClasses['validation-message']}\"></div>\n   <div class=\"${swalClasses.actions}\">\n     <div class=\"${swalClasses.loader}\"></div>\n     <button type=\"button\" class=\"${swalClasses.confirm}\"></button>\n     <button type=\"button\" class=\"${swalClasses.deny}\"></button>\n     <button type=\"button\" class=\"${swalClasses.cancel}\"></button>\n   </div>\n   <div class=\"${swalClasses.footer}\"></div>\n   <div class=\"${swalClasses['timer-progress-bar-container']}\">\n     <div class=\"${swalClasses['timer-progress-bar']}\"></div>\n   </div>\n </div>\n`.replace(/(^|\\n)\\s*/g, '');\n\n  /**\n   * @returns {boolean}\n   */\n  const resetOldContainer = () => {\n    const oldContainer = getContainer();\n    if (!oldContainer) {\n      return false;\n    }\n    oldContainer.remove();\n    removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);\n    return true;\n  };\n  const resetValidationMessage$1 = () => {\n    globalState.currentInstance.resetValidationMessage();\n  };\n  const addInputChangeListeners = () => {\n    const popup = getPopup();\n    const input = getDirectChildByClass(popup, swalClasses.input);\n    const file = getDirectChildByClass(popup, swalClasses.file);\n    /** @type {HTMLInputElement} */\n    const range = popup.querySelector(`.${swalClasses.range} input`);\n    /** @type {HTMLOutputElement} */\n    const rangeOutput = popup.querySelector(`.${swalClasses.range} output`);\n    const select = getDirectChildByClass(popup, swalClasses.select);\n    /** @type {HTMLInputElement} */\n    const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`);\n    const textarea = getDirectChildByClass(popup, swalClasses.textarea);\n    input.oninput = resetValidationMessage$1;\n    file.onchange = resetValidationMessage$1;\n    select.onchange = resetValidationMessage$1;\n    checkbox.onchange = resetValidationMessage$1;\n    textarea.oninput = resetValidationMessage$1;\n    range.oninput = () => {\n      resetValidationMessage$1();\n      rangeOutput.value = range.value;\n    };\n    range.onchange = () => {\n      resetValidationMessage$1();\n      rangeOutput.value = range.value;\n    };\n  };\n\n  /**\n   * @param {string | HTMLElement} target\n   * @returns {HTMLElement}\n   */\n  const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target;\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  const setupAccessibility = params => {\n    const popup = getPopup();\n    popup.setAttribute('role', params.toast ? 'alert' : 'dialog');\n    popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');\n    if (!params.toast) {\n      popup.setAttribute('aria-modal', 'true');\n    }\n  };\n\n  /**\n   * @param {HTMLElement} targetElement\n   */\n  const setupRTL = targetElement => {\n    if (window.getComputedStyle(targetElement).direction === 'rtl') {\n      addClass(getContainer(), swalClasses.rtl);\n    }\n  };\n\n  /**\n   * Add modal + backdrop to DOM\n   *\n   * @param {SweetAlertOptions} params\n   */\n  const init = params => {\n    // Clean up the old popup container if it exists\n    const oldContainerExisted = resetOldContainer();\n    if (isNodeEnv()) {\n      error('SweetAlert2 requires document to initialize');\n      return;\n    }\n    const container = document.createElement('div');\n    container.className = swalClasses.container;\n    if (oldContainerExisted) {\n      addClass(container, swalClasses['no-transition']);\n    }\n    setInnerHtml(container, sweetHTML);\n    container.dataset['swal2Theme'] = params.theme;\n    const targetElement = getTarget(params.target);\n    targetElement.appendChild(container);\n    if (params.topLayer) {\n      container.setAttribute('popover', '');\n      container.showPopover();\n    }\n    setupAccessibility(params);\n    setupRTL(targetElement);\n    addInputChangeListeners();\n  };\n\n  /**\n   * @param {HTMLElement | object | string} param\n   * @param {HTMLElement} target\n   */\n  const parseHtmlToContainer = (param, target) => {\n    // DOM element\n    if (param instanceof HTMLElement) {\n      target.appendChild(param);\n    }\n\n    // Object\n    else if (typeof param === 'object') {\n      handleObject(param, target);\n    }\n\n    // Plain string\n    else if (param) {\n      setInnerHtml(target, param);\n    }\n  };\n\n  /**\n   * @param {any} param\n   * @param {HTMLElement} target\n   */\n  const handleObject = (param, target) => {\n    // JQuery element(s)\n    if (param.jquery) {\n      handleJqueryElem(target, param);\n    }\n\n    // For other objects use their string representation\n    else {\n      setInnerHtml(target, param.toString());\n    }\n  };\n\n  /**\n   * @param {HTMLElement} target\n   * @param {any} elem\n   */\n  const handleJqueryElem = (target, elem) => {\n    target.textContent = '';\n    if (0 in elem) {\n      for (let i = 0; i in elem; i++) {\n        target.appendChild(elem[i].cloneNode(true));\n      }\n    } else {\n      target.appendChild(elem.cloneNode(true));\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderActions = (instance, params) => {\n    const actions = getActions();\n    const loader = getLoader();\n    if (!actions || !loader) {\n      return;\n    }\n\n    // Actions (buttons) wrapper\n    if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {\n      hide(actions);\n    } else {\n      show(actions);\n    }\n\n    // Custom class\n    applyCustomClass(actions, params, 'actions');\n\n    // Render all the buttons\n    renderButtons(actions, loader, params);\n\n    // Loader\n    setInnerHtml(loader, params.loaderHtml || '');\n    applyCustomClass(loader, params, 'loader');\n  };\n\n  /**\n   * @param {HTMLElement} actions\n   * @param {HTMLElement} loader\n   * @param {SweetAlertOptions} params\n   */\n  function renderButtons(actions, loader, params) {\n    const confirmButton = getConfirmButton();\n    const denyButton = getDenyButton();\n    const cancelButton = getCancelButton();\n    if (!confirmButton || !denyButton || !cancelButton) {\n      return;\n    }\n\n    // Render buttons\n    renderButton(confirmButton, 'confirm', params);\n    renderButton(denyButton, 'deny', params);\n    renderButton(cancelButton, 'cancel', params);\n    handleButtonsStyling(confirmButton, denyButton, cancelButton, params);\n    if (params.reverseButtons) {\n      if (params.toast) {\n        actions.insertBefore(cancelButton, confirmButton);\n        actions.insertBefore(denyButton, confirmButton);\n      } else {\n        actions.insertBefore(cancelButton, loader);\n        actions.insertBefore(denyButton, loader);\n        actions.insertBefore(confirmButton, loader);\n      }\n    }\n  }\n\n  /**\n   * @param {HTMLElement} confirmButton\n   * @param {HTMLElement} denyButton\n   * @param {HTMLElement} cancelButton\n   * @param {SweetAlertOptions} params\n   */\n  function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {\n    if (!params.buttonsStyling) {\n      removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n      return;\n    }\n    addClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n\n    // Apply custom background colors to action buttons\n    if (params.confirmButtonColor) {\n      confirmButton.style.setProperty('--swal2-confirm-button-background-color', params.confirmButtonColor);\n    }\n    if (params.denyButtonColor) {\n      denyButton.style.setProperty('--swal2-deny-button-background-color', params.denyButtonColor);\n    }\n    if (params.cancelButtonColor) {\n      cancelButton.style.setProperty('--swal2-cancel-button-background-color', params.cancelButtonColor);\n    }\n\n    // Apply the outline color to action buttons\n    applyOutlineColor(confirmButton);\n    applyOutlineColor(denyButton);\n    applyOutlineColor(cancelButton);\n  }\n\n  /**\n   * @param {HTMLElement} button\n   */\n  function applyOutlineColor(button) {\n    const buttonStyle = window.getComputedStyle(button);\n    if (buttonStyle.getPropertyValue('--swal2-action-button-focus-box-shadow')) {\n      // If the button already has a custom outline color, no need to change it\n      return;\n    }\n    const outlineColor = buttonStyle.backgroundColor.replace(/rgba?\\((\\d+), (\\d+), (\\d+).*/, 'rgba($1, $2, $3, 0.5)');\n    button.style.setProperty('--swal2-action-button-focus-box-shadow', buttonStyle.getPropertyValue('--swal2-outline').replace(/ rgba\\(.*/, ` ${outlineColor}`));\n  }\n\n  /**\n   * @param {HTMLElement} button\n   * @param {'confirm' | 'deny' | 'cancel'} buttonType\n   * @param {SweetAlertOptions} params\n   */\n  function renderButton(button, buttonType, params) {\n    const buttonName = /** @type {'Confirm' | 'Deny' | 'Cancel'} */capitalizeFirstLetter(buttonType);\n    toggle(button, params[`show${buttonName}Button`], 'inline-block');\n    setInnerHtml(button, params[`${buttonType}ButtonText`] || ''); // Set caption text\n    button.setAttribute('aria-label', params[`${buttonType}ButtonAriaLabel`] || ''); // ARIA label\n\n    // Add buttons custom classes\n    button.className = swalClasses[buttonType];\n    applyCustomClass(button, params, `${buttonType}Button`);\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderCloseButton = (instance, params) => {\n    const closeButton = getCloseButton();\n    if (!closeButton) {\n      return;\n    }\n    setInnerHtml(closeButton, params.closeButtonHtml || '');\n\n    // Custom class\n    applyCustomClass(closeButton, params, 'closeButton');\n    toggle(closeButton, params.showCloseButton);\n    closeButton.setAttribute('aria-label', params.closeButtonAriaLabel || '');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderContainer = (instance, params) => {\n    const container = getContainer();\n    if (!container) {\n      return;\n    }\n    handleBackdropParam(container, params.backdrop);\n    handlePositionParam(container, params.position);\n    handleGrowParam(container, params.grow);\n\n    // Custom class\n    applyCustomClass(container, params, 'container');\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {SweetAlertOptions['backdrop']} backdrop\n   */\n  function handleBackdropParam(container, backdrop) {\n    if (typeof backdrop === 'string') {\n      container.style.background = backdrop;\n    } else if (!backdrop) {\n      addClass([document.documentElement, document.body], swalClasses['no-backdrop']);\n    }\n  }\n\n  /**\n   * @param {HTMLElement} container\n   * @param {SweetAlertOptions['position']} position\n   */\n  function handlePositionParam(container, position) {\n    if (!position) {\n      return;\n    }\n    if (position in swalClasses) {\n      addClass(container, swalClasses[position]);\n    } else {\n      warn('The \"position\" parameter is not valid, defaulting to \"center\"');\n      addClass(container, swalClasses.center);\n    }\n  }\n\n  /**\n   * @param {HTMLElement} container\n   * @param {SweetAlertOptions['grow']} grow\n   */\n  function handleGrowParam(container, grow) {\n    if (!grow) {\n      return;\n    }\n    addClass(container, swalClasses[`grow-${grow}`]);\n  }\n\n  /**\n   * This module contains `WeakMap`s for each effectively-\"private  property\" that a `Swal` has.\n   * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n   * This is the approach that Babel will probably take to implement private methods/fields\n   *   https://github.com/tc39/proposal-private-methods\n   *   https://github.com/babel/babel/pull/7555\n   * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n   *   then we can use that language feature.\n   */\n\n  var privateProps = {\n    innerParams: new WeakMap(),\n    domCache: new WeakMap()\n  };\n\n  /// <reference path=\"../../../../sweetalert2.d.ts\"/>\n\n\n  /** @type {InputClass[]} */\n  const inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderInput = (instance, params) => {\n    const popup = getPopup();\n    if (!popup) {\n      return;\n    }\n    const innerParams = privateProps.innerParams.get(instance);\n    const rerender = !innerParams || params.input !== innerParams.input;\n    inputClasses.forEach(inputClass => {\n      const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);\n      if (!inputContainer) {\n        return;\n      }\n\n      // set attributes\n      setAttributes(inputClass, params.inputAttributes);\n\n      // set class\n      inputContainer.className = swalClasses[inputClass];\n      if (rerender) {\n        hide(inputContainer);\n      }\n    });\n    if (params.input) {\n      if (rerender) {\n        showInput(params);\n      }\n      // set custom class\n      setCustomClass(params);\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  const showInput = params => {\n    if (!params.input) {\n      return;\n    }\n    if (!renderInputType[params.input]) {\n      error(`Unexpected type of input! Expected ${Object.keys(renderInputType).join(' | ')}, got \"${params.input}\"`);\n      return;\n    }\n    const inputContainer = getInputContainer(params.input);\n    if (!inputContainer) {\n      return;\n    }\n    const input = renderInputType[params.input](inputContainer, params);\n    show(inputContainer);\n\n    // input autofocus\n    if (params.inputAutoFocus) {\n      setTimeout(() => {\n        focusInput(input);\n      });\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement} input\n   */\n  const removeAttributes = input => {\n    for (let i = 0; i < input.attributes.length; i++) {\n      const attrName = input.attributes[i].name;\n      if (!['id', 'type', 'value', 'style'].includes(attrName)) {\n        input.removeAttribute(attrName);\n      }\n    }\n  };\n\n  /**\n   * @param {InputClass} inputClass\n   * @param {SweetAlertOptions['inputAttributes']} inputAttributes\n   */\n  const setAttributes = (inputClass, inputAttributes) => {\n    const popup = getPopup();\n    if (!popup) {\n      return;\n    }\n    const input = getInput$1(popup, inputClass);\n    if (!input) {\n      return;\n    }\n    removeAttributes(input);\n    for (const attr in inputAttributes) {\n      input.setAttribute(attr, inputAttributes[attr]);\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  const setCustomClass = params => {\n    if (!params.input) {\n      return;\n    }\n    const inputContainer = getInputContainer(params.input);\n    if (inputContainer) {\n      applyCustomClass(inputContainer, params, 'input');\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement | HTMLTextAreaElement} input\n   * @param {SweetAlertOptions} params\n   */\n  const setInputPlaceholder = (input, params) => {\n    if (!input.placeholder && params.inputPlaceholder) {\n      input.placeholder = params.inputPlaceholder;\n    }\n  };\n\n  /**\n   * @param {Input} input\n   * @param {Input} prependTo\n   * @param {SweetAlertOptions} params\n   */\n  const setInputLabel = (input, prependTo, params) => {\n    if (params.inputLabel) {\n      const label = document.createElement('label');\n      const labelClass = swalClasses['input-label'];\n      label.setAttribute('for', input.id);\n      label.className = labelClass;\n      if (typeof params.customClass === 'object') {\n        addClass(label, params.customClass.inputLabel);\n      }\n      label.innerText = params.inputLabel;\n      prependTo.insertAdjacentElement('beforebegin', label);\n    }\n  };\n\n  /**\n   * @param {SweetAlertInput} inputType\n   * @returns {HTMLElement | undefined}\n   */\n  const getInputContainer = inputType => {\n    const popup = getPopup();\n    if (!popup) {\n      return;\n    }\n    return getDirectChildByClass(popup, swalClasses[(/** @type {SwalClass} */inputType)] || swalClasses.input);\n  };\n\n  /**\n   * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input\n   * @param {SweetAlertOptions['inputValue']} inputValue\n   */\n  const checkAndSetInputValue = (input, inputValue) => {\n    if (['string', 'number'].includes(typeof inputValue)) {\n      input.value = `${inputValue}`;\n    } else if (!isPromise(inputValue)) {\n      warn(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof inputValue}\"`);\n    }\n  };\n\n  /** @type {Record<SweetAlertInput, (input: Input | HTMLElement, params: SweetAlertOptions) => Input>} */\n  const renderInputType = {};\n\n  /**\n   * @param {HTMLInputElement} input\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = renderInputType.search = renderInputType.date = renderInputType['datetime-local'] = renderInputType.time = renderInputType.week = renderInputType.month = /** @type {(input: Input | HTMLElement, params: SweetAlertOptions) => Input} */\n  (input, params) => {\n    checkAndSetInputValue(input, params.inputValue);\n    setInputLabel(input, input, params);\n    setInputPlaceholder(input, params);\n    input.type = params.input;\n    return input;\n  };\n\n  /**\n   * @param {HTMLInputElement} input\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.file = (input, params) => {\n    setInputLabel(input, input, params);\n    setInputPlaceholder(input, params);\n    return input;\n  };\n\n  /**\n   * @param {HTMLInputElement} range\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.range = (range, params) => {\n    const rangeInput = range.querySelector('input');\n    const rangeOutput = range.querySelector('output');\n    checkAndSetInputValue(rangeInput, params.inputValue);\n    rangeInput.type = params.input;\n    checkAndSetInputValue(rangeOutput, params.inputValue);\n    setInputLabel(rangeInput, range, params);\n    return range;\n  };\n\n  /**\n   * @param {HTMLSelectElement} select\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLSelectElement}\n   */\n  renderInputType.select = (select, params) => {\n    select.textContent = '';\n    if (params.inputPlaceholder) {\n      const placeholder = document.createElement('option');\n      setInnerHtml(placeholder, params.inputPlaceholder);\n      placeholder.value = '';\n      placeholder.disabled = true;\n      placeholder.selected = true;\n      select.appendChild(placeholder);\n    }\n    setInputLabel(select, select, params);\n    return select;\n  };\n\n  /**\n   * @param {HTMLInputElement} radio\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.radio = radio => {\n    radio.textContent = '';\n    return radio;\n  };\n\n  /**\n   * @param {HTMLLabelElement} checkboxContainer\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.checkbox = (checkboxContainer, params) => {\n    const checkbox = getInput$1(getPopup(), 'checkbox');\n    checkbox.value = '1';\n    checkbox.checked = Boolean(params.inputValue);\n    const label = checkboxContainer.querySelector('span');\n    setInnerHtml(label, params.inputPlaceholder || params.inputLabel);\n    return checkbox;\n  };\n\n  /**\n   * @param {HTMLTextAreaElement} textarea\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLTextAreaElement}\n   */\n  renderInputType.textarea = (textarea, params) => {\n    checkAndSetInputValue(textarea, params.inputValue);\n    setInputPlaceholder(textarea, params);\n    setInputLabel(textarea, textarea, params);\n\n    /**\n     * @param {HTMLElement} el\n     * @returns {number}\n     */\n    const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);\n\n    // https://github.com/sweetalert2/sweetalert2/issues/2291\n    setTimeout(() => {\n      // https://github.com/sweetalert2/sweetalert2/issues/1699\n      if ('MutationObserver' in window) {\n        const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);\n        const textareaResizeHandler = () => {\n          // check if texarea is still in document (i.e. popup wasn't closed in the meantime)\n          if (!document.body.contains(textarea)) {\n            return;\n          }\n          const textareaWidth = textarea.offsetWidth + getMargin(textarea);\n          if (textareaWidth > initialPopupWidth) {\n            getPopup().style.width = `${textareaWidth}px`;\n          } else {\n            applyNumericalStyle(getPopup(), 'width', params.width);\n          }\n        };\n        new MutationObserver(textareaResizeHandler).observe(textarea, {\n          attributes: true,\n          attributeFilter: ['style']\n        });\n      }\n    });\n    return textarea;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderContent = (instance, params) => {\n    const htmlContainer = getHtmlContainer();\n    if (!htmlContainer) {\n      return;\n    }\n    showWhenInnerHtmlPresent(htmlContainer);\n    applyCustomClass(htmlContainer, params, 'htmlContainer');\n\n    // Content as HTML\n    if (params.html) {\n      parseHtmlToContainer(params.html, htmlContainer);\n      show(htmlContainer, 'block');\n    }\n\n    // Content as plain text\n    else if (params.text) {\n      htmlContainer.textContent = params.text;\n      show(htmlContainer, 'block');\n    }\n\n    // No content\n    else {\n      hide(htmlContainer);\n    }\n    renderInput(instance, params);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderFooter = (instance, params) => {\n    const footer = getFooter();\n    if (!footer) {\n      return;\n    }\n    showWhenInnerHtmlPresent(footer);\n    toggle(footer, params.footer, 'block');\n    if (params.footer) {\n      parseHtmlToContainer(params.footer, footer);\n    }\n\n    // Custom class\n    applyCustomClass(footer, params, 'footer');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderIcon = (instance, params) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    const icon = getIcon();\n    if (!icon) {\n      return;\n    }\n\n    // if the given icon already rendered, apply the styling without re-rendering the icon\n    if (innerParams && params.icon === innerParams.icon) {\n      // Custom or default content\n      setContent(icon, params);\n      applyStyles(icon, params);\n      return;\n    }\n    if (!params.icon && !params.iconHtml) {\n      hide(icon);\n      return;\n    }\n    if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {\n      error(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${params.icon}\"`);\n      hide(icon);\n      return;\n    }\n    show(icon);\n\n    // Custom or default content\n    setContent(icon, params);\n    applyStyles(icon, params);\n\n    // Animate icon\n    addClass(icon, params.showClass && params.showClass.icon);\n\n    // Re-adjust the success icon on system theme change\n    const colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: dark)');\n    colorSchemeQueryList.addEventListener('change', adjustSuccessIconBackgroundColor);\n  };\n\n  /**\n   * @param {HTMLElement} icon\n   * @param {SweetAlertOptions} params\n   */\n  const applyStyles = (icon, params) => {\n    for (const [iconType, iconClassName] of Object.entries(iconTypes)) {\n      if (params.icon !== iconType) {\n        removeClass(icon, iconClassName);\n      }\n    }\n    addClass(icon, params.icon && iconTypes[params.icon]);\n\n    // Icon color\n    setColor(icon, params);\n\n    // Success icon background color\n    adjustSuccessIconBackgroundColor();\n\n    // Custom class\n    applyCustomClass(icon, params, 'icon');\n  };\n\n  // Adjust success icon background color to match the popup background color\n  const adjustSuccessIconBackgroundColor = () => {\n    const popup = getPopup();\n    if (!popup) {\n      return;\n    }\n    const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');\n    /** @type {NodeListOf<HTMLElement>} */\n    const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');\n    for (let i = 0; i < successIconParts.length; i++) {\n      successIconParts[i].style.backgroundColor = popupBackgroundColor;\n    }\n  };\n\n  /**\n   *\n   * @param {SweetAlertOptions} params\n   * @returns {string}\n   */\n  const successIconHtml = params => `\n  ${params.animation ? '<div class=\"swal2-success-circular-line-left\"></div>' : ''}\n  <span class=\"swal2-success-line-tip\"></span> <span class=\"swal2-success-line-long\"></span>\n  <div class=\"swal2-success-ring\"></div>\n  ${params.animation ? '<div class=\"swal2-success-fix\"></div>' : ''}\n  ${params.animation ? '<div class=\"swal2-success-circular-line-right\"></div>' : ''}\n`;\n  const errorIconHtml = `\n  <span class=\"swal2-x-mark\">\n    <span class=\"swal2-x-mark-line-left\"></span>\n    <span class=\"swal2-x-mark-line-right\"></span>\n  </span>\n`;\n\n  /**\n   * @param {HTMLElement} icon\n   * @param {SweetAlertOptions} params\n   */\n  const setContent = (icon, params) => {\n    if (!params.icon && !params.iconHtml) {\n      return;\n    }\n    let oldContent = icon.innerHTML;\n    let newContent = '';\n    if (params.iconHtml) {\n      newContent = iconContent(params.iconHtml);\n    } else if (params.icon === 'success') {\n      newContent = successIconHtml(params);\n      oldContent = oldContent.replace(/ style=\".*?\"/g, ''); // undo adjustSuccessIconBackgroundColor()\n    } else if (params.icon === 'error') {\n      newContent = errorIconHtml;\n    } else if (params.icon) {\n      const defaultIconHtml = {\n        question: '?',\n        warning: '!',\n        info: 'i'\n      };\n      newContent = iconContent(defaultIconHtml[params.icon]);\n    }\n    if (oldContent.trim() !== newContent.trim()) {\n      setInnerHtml(icon, newContent);\n    }\n  };\n\n  /**\n   * @param {HTMLElement} icon\n   * @param {SweetAlertOptions} params\n   */\n  const setColor = (icon, params) => {\n    if (!params.iconColor) {\n      return;\n    }\n    icon.style.color = params.iconColor;\n    icon.style.borderColor = params.iconColor;\n    for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) {\n      setStyle(icon, sel, 'background-color', params.iconColor);\n    }\n    setStyle(icon, '.swal2-success-ring', 'border-color', params.iconColor);\n  };\n\n  /**\n   * @param {string} content\n   * @returns {string}\n   */\n  const iconContent = content => `<div class=\"${swalClasses['icon-content']}\">${content}</div>`;\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderImage = (instance, params) => {\n    const image = getImage();\n    if (!image) {\n      return;\n    }\n    if (!params.imageUrl) {\n      hide(image);\n      return;\n    }\n    show(image, '');\n\n    // Src, alt\n    image.setAttribute('src', params.imageUrl);\n    image.setAttribute('alt', params.imageAlt || '');\n\n    // Width, height\n    applyNumericalStyle(image, 'width', params.imageWidth);\n    applyNumericalStyle(image, 'height', params.imageHeight);\n\n    // Class\n    image.className = swalClasses.image;\n    applyCustomClass(image, params, 'image');\n  };\n\n  let dragging = false;\n  let mousedownX = 0;\n  let mousedownY = 0;\n  let initialX = 0;\n  let initialY = 0;\n\n  /**\n   * @param {HTMLElement} popup\n   */\n  const addDraggableListeners = popup => {\n    popup.addEventListener('mousedown', down);\n    document.body.addEventListener('mousemove', move);\n    popup.addEventListener('mouseup', up);\n    popup.addEventListener('touchstart', down);\n    document.body.addEventListener('touchmove', move);\n    popup.addEventListener('touchend', up);\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   */\n  const removeDraggableListeners = popup => {\n    popup.removeEventListener('mousedown', down);\n    document.body.removeEventListener('mousemove', move);\n    popup.removeEventListener('mouseup', up);\n    popup.removeEventListener('touchstart', down);\n    document.body.removeEventListener('touchmove', move);\n    popup.removeEventListener('touchend', up);\n  };\n\n  /**\n   * @param {MouseEvent | TouchEvent} event\n   */\n  const down = event => {\n    const popup = getPopup();\n    if (event.target === popup || getIcon().contains(/** @type {HTMLElement} */event.target)) {\n      dragging = true;\n      const clientXY = getClientXY(event);\n      mousedownX = clientXY.clientX;\n      mousedownY = clientXY.clientY;\n      initialX = parseInt(popup.style.insetInlineStart) || 0;\n      initialY = parseInt(popup.style.insetBlockStart) || 0;\n      addClass(popup, 'swal2-dragging');\n    }\n  };\n\n  /**\n   * @param {MouseEvent | TouchEvent} event\n   */\n  const move = event => {\n    const popup = getPopup();\n    if (dragging) {\n      let {\n        clientX,\n        clientY\n      } = getClientXY(event);\n      popup.style.insetInlineStart = `${initialX + (clientX - mousedownX)}px`;\n      popup.style.insetBlockStart = `${initialY + (clientY - mousedownY)}px`;\n    }\n  };\n  const up = () => {\n    const popup = getPopup();\n    dragging = false;\n    removeClass(popup, 'swal2-dragging');\n  };\n\n  /**\n   * @param {MouseEvent | TouchEvent} event\n   * @returns {{ clientX: number, clientY: number }}\n   */\n  const getClientXY = event => {\n    let clientX = 0,\n      clientY = 0;\n    if (event.type.startsWith('mouse')) {\n      clientX = /** @type {MouseEvent} */event.clientX;\n      clientY = /** @type {MouseEvent} */event.clientY;\n    } else if (event.type.startsWith('touch')) {\n      clientX = /** @type {TouchEvent} */event.touches[0].clientX;\n      clientY = /** @type {TouchEvent} */event.touches[0].clientY;\n    }\n    return {\n      clientX,\n      clientY\n    };\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderPopup = (instance, params) => {\n    const container = getContainer();\n    const popup = getPopup();\n    if (!container || !popup) {\n      return;\n    }\n\n    // Width\n    // https://github.com/sweetalert2/sweetalert2/issues/2170\n    if (params.toast) {\n      applyNumericalStyle(container, 'width', params.width);\n      popup.style.width = '100%';\n      const loader = getLoader();\n      if (loader) {\n        popup.insertBefore(loader, getIcon());\n      }\n    } else {\n      applyNumericalStyle(popup, 'width', params.width);\n    }\n\n    // Padding\n    applyNumericalStyle(popup, 'padding', params.padding);\n\n    // Color\n    if (params.color) {\n      popup.style.color = params.color;\n    }\n\n    // Background\n    if (params.background) {\n      popup.style.background = params.background;\n    }\n    hide(getValidationMessage());\n\n    // Classes\n    addClasses$1(popup, params);\n    if (params.draggable && !params.toast) {\n      addClass(popup, swalClasses.draggable);\n      addDraggableListeners(popup);\n    } else {\n      removeClass(popup, swalClasses.draggable);\n      removeDraggableListeners(popup);\n    }\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {SweetAlertOptions} params\n   */\n  const addClasses$1 = (popup, params) => {\n    const showClass = params.showClass || {};\n    // Default Class + showClass when updating Swal.update({})\n    popup.className = `${swalClasses.popup} ${isVisible$1(popup) ? showClass.popup : ''}`;\n    if (params.toast) {\n      addClass([document.documentElement, document.body], swalClasses['toast-shown']);\n      addClass(popup, swalClasses.toast);\n    } else {\n      addClass(popup, swalClasses.modal);\n    }\n\n    // Custom class\n    applyCustomClass(popup, params, 'popup');\n    // TODO: remove in the next major\n    if (typeof params.customClass === 'string') {\n      addClass(popup, params.customClass);\n    }\n\n    // Icon class (#1842)\n    if (params.icon) {\n      addClass(popup, swalClasses[`icon-${params.icon}`]);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderProgressSteps = (instance, params) => {\n    const progressStepsContainer = getProgressSteps();\n    if (!progressStepsContainer) {\n      return;\n    }\n    const {\n      progressSteps,\n      currentProgressStep\n    } = params;\n    if (!progressSteps || progressSteps.length === 0 || currentProgressStep === undefined) {\n      hide(progressStepsContainer);\n      return;\n    }\n    show(progressStepsContainer);\n    progressStepsContainer.textContent = '';\n    if (currentProgressStep >= progressSteps.length) {\n      warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n    }\n    progressSteps.forEach((step, index) => {\n      const stepEl = createStepElement(step);\n      progressStepsContainer.appendChild(stepEl);\n      if (index === currentProgressStep) {\n        addClass(stepEl, swalClasses['active-progress-step']);\n      }\n      if (index !== progressSteps.length - 1) {\n        const lineEl = createLineElement(params);\n        progressStepsContainer.appendChild(lineEl);\n      }\n    });\n  };\n\n  /**\n   * @param {string} step\n   * @returns {HTMLLIElement}\n   */\n  const createStepElement = step => {\n    const stepEl = document.createElement('li');\n    addClass(stepEl, swalClasses['progress-step']);\n    setInnerHtml(stepEl, step);\n    return stepEl;\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLLIElement}\n   */\n  const createLineElement = params => {\n    const lineEl = document.createElement('li');\n    addClass(lineEl, swalClasses['progress-step-line']);\n    if (params.progressStepsDistance) {\n      applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);\n    }\n    return lineEl;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderTitle = (instance, params) => {\n    const title = getTitle();\n    if (!title) {\n      return;\n    }\n    showWhenInnerHtmlPresent(title);\n    toggle(title, params.title || params.titleText, 'block');\n    if (params.title) {\n      parseHtmlToContainer(params.title, title);\n    }\n    if (params.titleText) {\n      title.innerText = params.titleText;\n    }\n\n    // Custom class\n    applyCustomClass(title, params, 'title');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const render = (instance, params) => {\n    renderPopup(instance, params);\n    renderContainer(instance, params);\n    renderProgressSteps(instance, params);\n    renderIcon(instance, params);\n    renderImage(instance, params);\n    renderTitle(instance, params);\n    renderCloseButton(instance, params);\n    renderContent(instance, params);\n    renderActions(instance, params);\n    renderFooter(instance, params);\n    const popup = getPopup();\n    if (typeof params.didRender === 'function' && popup) {\n      params.didRender(popup);\n    }\n    globalState.eventEmitter.emit('didRender', popup);\n  };\n\n  /*\n   * Global function to determine if SweetAlert2 popup is shown\n   */\n  const isVisible = () => {\n    return isVisible$1(getPopup());\n  };\n\n  /*\n   * Global function to click 'Confirm' button\n   */\n  const clickConfirm = () => {\n    var _dom$getConfirmButton;\n    return (_dom$getConfirmButton = getConfirmButton()) === null || _dom$getConfirmButton === void 0 ? void 0 : _dom$getConfirmButton.click();\n  };\n\n  /*\n   * Global function to click 'Deny' button\n   */\n  const clickDeny = () => {\n    var _dom$getDenyButton;\n    return (_dom$getDenyButton = getDenyButton()) === null || _dom$getDenyButton === void 0 ? void 0 : _dom$getDenyButton.click();\n  };\n\n  /*\n   * Global function to click 'Cancel' button\n   */\n  const clickCancel = () => {\n    var _dom$getCancelButton;\n    return (_dom$getCancelButton = getCancelButton()) === null || _dom$getCancelButton === void 0 ? void 0 : _dom$getCancelButton.click();\n  };\n\n  /** @typedef {'cancel' | 'backdrop' | 'close' | 'esc' | 'timer'} DismissReason */\n\n  /** @type {Record<DismissReason, DismissReason>} */\n  const DismissReason = Object.freeze({\n    cancel: 'cancel',\n    backdrop: 'backdrop',\n    close: 'close',\n    esc: 'esc',\n    timer: 'timer'\n  });\n\n  /**\n   * @param {GlobalState} globalState\n   */\n  const removeKeydownHandler = globalState => {\n    if (globalState.keydownTarget && globalState.keydownHandlerAdded) {\n      globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {\n        capture: globalState.keydownListenerCapture\n      });\n      globalState.keydownHandlerAdded = false;\n    }\n  };\n\n  /**\n   * @param {GlobalState} globalState\n   * @param {SweetAlertOptions} innerParams\n   * @param {*} dismissWith\n   */\n  const addKeydownHandler = (globalState, innerParams, dismissWith) => {\n    removeKeydownHandler(globalState);\n    if (!innerParams.toast) {\n      globalState.keydownHandler = e => keydownHandler(innerParams, e, dismissWith);\n      globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();\n      globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n      globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {\n        capture: globalState.keydownListenerCapture\n      });\n      globalState.keydownHandlerAdded = true;\n    }\n  };\n\n  /**\n   * @param {number} index\n   * @param {number} increment\n   */\n  const setFocus = (index, increment) => {\n    var _dom$getPopup;\n    const focusableElements = getFocusableElements();\n    // search for visible elements and select the next possible match\n    if (focusableElements.length) {\n      index = index + increment;\n\n      // shift + tab when .swal2-popup is focused\n      if (index === -2) {\n        index = focusableElements.length - 1;\n      }\n\n      // rollover to first item\n      if (index === focusableElements.length) {\n        index = 0;\n\n        // go to last item\n      } else if (index === -1) {\n        index = focusableElements.length - 1;\n      }\n      focusableElements[index].focus();\n      return;\n    }\n    // no visible focusable elements, focus the popup\n    (_dom$getPopup = getPopup()) === null || _dom$getPopup === void 0 || _dom$getPopup.focus();\n  };\n  const arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];\n  const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];\n\n  /**\n   * @param {SweetAlertOptions} innerParams\n   * @param {KeyboardEvent} event\n   * @param {Function} dismissWith\n   */\n  const keydownHandler = (innerParams, event, dismissWith) => {\n    if (!innerParams) {\n      return; // This instance has already been destroyed\n    }\n\n    // Ignore keydown during IME composition\n    // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition\n    // https://github.com/sweetalert2/sweetalert2/issues/720\n    // https://github.com/sweetalert2/sweetalert2/issues/2406\n    if (event.isComposing || event.keyCode === 229) {\n      return;\n    }\n    if (innerParams.stopKeydownPropagation) {\n      event.stopPropagation();\n    }\n\n    // ENTER\n    if (event.key === 'Enter') {\n      handleEnter(event, innerParams);\n    }\n\n    // TAB\n    else if (event.key === 'Tab') {\n      handleTab(event);\n    }\n\n    // ARROWS - switch focus between buttons\n    else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(event.key)) {\n      handleArrows(event.key);\n    }\n\n    // ESC\n    else if (event.key === 'Escape') {\n      handleEsc(event, innerParams, dismissWith);\n    }\n  };\n\n  /**\n   * @param {KeyboardEvent} event\n   * @param {SweetAlertOptions} innerParams\n   */\n  const handleEnter = (event, innerParams) => {\n    // https://github.com/sweetalert2/sweetalert2/issues/2386\n    if (!callIfFunction(innerParams.allowEnterKey)) {\n      return;\n    }\n    const input = getInput$1(getPopup(), innerParams.input);\n    if (event.target && input && event.target instanceof HTMLElement && event.target.outerHTML === input.outerHTML) {\n      if (['textarea', 'file'].includes(innerParams.input)) {\n        return; // do not submit\n      }\n      clickConfirm();\n      event.preventDefault();\n    }\n  };\n\n  /**\n   * @param {KeyboardEvent} event\n   */\n  const handleTab = event => {\n    const targetElement = event.target;\n    const focusableElements = getFocusableElements();\n    let btnIndex = -1;\n    for (let i = 0; i < focusableElements.length; i++) {\n      if (targetElement === focusableElements[i]) {\n        btnIndex = i;\n        break;\n      }\n    }\n\n    // Cycle to the next button\n    if (!event.shiftKey) {\n      setFocus(btnIndex, 1);\n    }\n\n    // Cycle to the prev button\n    else {\n      setFocus(btnIndex, -1);\n    }\n    event.stopPropagation();\n    event.preventDefault();\n  };\n\n  /**\n   * @param {string} key\n   */\n  const handleArrows = key => {\n    const actions = getActions();\n    const confirmButton = getConfirmButton();\n    const denyButton = getDenyButton();\n    const cancelButton = getCancelButton();\n    if (!actions || !confirmButton || !denyButton || !cancelButton) {\n      return;\n    }\n    /** @type HTMLElement[] */\n    const buttons = [confirmButton, denyButton, cancelButton];\n    if (document.activeElement instanceof HTMLElement && !buttons.includes(document.activeElement)) {\n      return;\n    }\n    const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';\n    let buttonToFocus = document.activeElement;\n    if (!buttonToFocus) {\n      return;\n    }\n    for (let i = 0; i < actions.children.length; i++) {\n      buttonToFocus = buttonToFocus[sibling];\n      if (!buttonToFocus) {\n        return;\n      }\n      if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {\n        break;\n      }\n    }\n    if (buttonToFocus instanceof HTMLButtonElement) {\n      buttonToFocus.focus();\n    }\n  };\n\n  /**\n   * @param {KeyboardEvent} event\n   * @param {SweetAlertOptions} innerParams\n   * @param {Function} dismissWith\n   */\n  const handleEsc = (event, innerParams, dismissWith) => {\n    event.preventDefault();\n    if (callIfFunction(innerParams.allowEscapeKey)) {\n      dismissWith(DismissReason.esc);\n    }\n  };\n\n  /**\n   * This module contains `WeakMap`s for each effectively-\"private  property\" that a `Swal` has.\n   * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n   * This is the approach that Babel will probably take to implement private methods/fields\n   *   https://github.com/tc39/proposal-private-methods\n   *   https://github.com/babel/babel/pull/7555\n   * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n   *   then we can use that language feature.\n   */\n\n  var privateMethods = {\n    swalPromiseResolve: new WeakMap(),\n    swalPromiseReject: new WeakMap()\n  };\n\n  // From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/\n  // Adding aria-hidden=\"true\" to elements outside of the active modal dialog ensures that\n  // elements not within the active modal dialog will not be surfaced if a user opens a screen\n  // reader\u2019s list of elements (headings, form controls, landmarks, etc.) in the document.\n\n  const setAriaHidden = () => {\n    const container = getContainer();\n    const bodyChildren = Array.from(document.body.children);\n    bodyChildren.forEach(el => {\n      if (el.contains(container)) {\n        return;\n      }\n      if (el.hasAttribute('aria-hidden')) {\n        el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden') || '');\n      }\n      el.setAttribute('aria-hidden', 'true');\n    });\n  };\n  const unsetAriaHidden = () => {\n    const bodyChildren = Array.from(document.body.children);\n    bodyChildren.forEach(el => {\n      if (el.hasAttribute('data-previous-aria-hidden')) {\n        el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden') || '');\n        el.removeAttribute('data-previous-aria-hidden');\n      } else {\n        el.removeAttribute('aria-hidden');\n      }\n    });\n  };\n\n  // @ts-ignore\n  const isSafariOrIOS = typeof window !== 'undefined' && !!window.GestureEvent; // true for Safari desktop + all iOS browsers https://stackoverflow.com/a/70585394\n\n  /**\n   * Fix iOS scrolling\n   * http://stackoverflow.com/q/39626302\n   */\n  const iOSfix = () => {\n    if (isSafariOrIOS && !hasClass(document.body, swalClasses.iosfix)) {\n      const offset = document.body.scrollTop;\n      document.body.style.top = `${offset * -1}px`;\n      addClass(document.body, swalClasses.iosfix);\n      lockBodyScroll();\n    }\n  };\n\n  /**\n   * https://github.com/sweetalert2/sweetalert2/issues/1246\n   */\n  const lockBodyScroll = () => {\n    const container = getContainer();\n    if (!container) {\n      return;\n    }\n    /** @type {boolean} */\n    let preventTouchMove;\n    /**\n     * @param {TouchEvent} event\n     */\n    container.ontouchstart = event => {\n      preventTouchMove = shouldPreventTouchMove(event);\n    };\n    /**\n     * @param {TouchEvent} event\n     */\n    container.ontouchmove = event => {\n      if (preventTouchMove) {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    };\n  };\n\n  /**\n   * @param {TouchEvent} event\n   * @returns {boolean}\n   */\n  const shouldPreventTouchMove = event => {\n    const target = event.target;\n    const container = getContainer();\n    const htmlContainer = getHtmlContainer();\n    if (!container || !htmlContainer) {\n      return false;\n    }\n    if (isStylus(event) || isZoom(event)) {\n      return false;\n    }\n    if (target === container) {\n      return true;\n    }\n    if (!isScrollable(container) && target instanceof HTMLElement && !selfOrParentIsScrollable(target, htmlContainer) &&\n    // #2823\n    target.tagName !== 'INPUT' &&\n    // #1603\n    target.tagName !== 'TEXTAREA' &&\n    // #2266\n    !(isScrollable(htmlContainer) &&\n    // #1944\n    htmlContainer.contains(target))) {\n      return true;\n    }\n    return false;\n  };\n\n  /**\n   * https://github.com/sweetalert2/sweetalert2/issues/1786\n   *\n   * @param {*} event\n   * @returns {boolean}\n   */\n  const isStylus = event => {\n    return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';\n  };\n\n  /**\n   * https://github.com/sweetalert2/sweetalert2/issues/1891\n   *\n   * @param {TouchEvent} event\n   * @returns {boolean}\n   */\n  const isZoom = event => {\n    return event.touches && event.touches.length > 1;\n  };\n  const undoIOSfix = () => {\n    if (hasClass(document.body, swalClasses.iosfix)) {\n      const offset = parseInt(document.body.style.top, 10);\n      removeClass(document.body, swalClasses.iosfix);\n      document.body.style.top = '';\n      document.body.scrollTop = offset * -1;\n    }\n  };\n\n  /**\n   * Measure scrollbar width for padding body during modal show/hide\n   * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js\n   *\n   * @returns {number}\n   */\n  const measureScrollbar = () => {\n    const scrollDiv = document.createElement('div');\n    scrollDiv.className = swalClasses['scrollbar-measure'];\n    document.body.appendChild(scrollDiv);\n    const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n    document.body.removeChild(scrollDiv);\n    return scrollbarWidth;\n  };\n\n  /**\n   * Remember state in cases where opening and handling a modal will fiddle with it.\n   * @type {number | null}\n   */\n  let previousBodyPadding = null;\n\n  /**\n   * @param {string} initialBodyOverflow\n   */\n  const replaceScrollbarWithPadding = initialBodyOverflow => {\n    // for queues, do not do this more than once\n    if (previousBodyPadding !== null) {\n      return;\n    }\n    // if the body has overflow\n    if (document.body.scrollHeight > window.innerHeight || initialBodyOverflow === 'scroll' // https://github.com/sweetalert2/sweetalert2/issues/2663\n    ) {\n      // add padding so the content doesn't shift after removal of scrollbar\n      previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));\n      document.body.style.paddingRight = `${previousBodyPadding + measureScrollbar()}px`;\n    }\n  };\n  const undoReplaceScrollbarWithPadding = () => {\n    if (previousBodyPadding !== null) {\n      document.body.style.paddingRight = `${previousBodyPadding}px`;\n      previousBodyPadding = null;\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {HTMLElement} container\n   * @param {boolean} returnFocus\n   * @param {Function} didClose\n   */\n  function removePopupAndResetState(instance, container, returnFocus, didClose) {\n    if (isToast()) {\n      triggerDidCloseAndDispose(instance, didClose);\n    } else {\n      restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose));\n      removeKeydownHandler(globalState);\n    }\n\n    // workaround for https://github.com/sweetalert2/sweetalert2/issues/2088\n    // for some reason removing the container in Safari will scroll the document to bottom\n    if (isSafariOrIOS) {\n      container.setAttribute('style', 'display:none !important');\n      container.removeAttribute('class');\n      container.innerHTML = '';\n    } else {\n      container.remove();\n    }\n    if (isModal()) {\n      undoReplaceScrollbarWithPadding();\n      undoIOSfix();\n      unsetAriaHidden();\n    }\n    removeBodyClasses();\n  }\n\n  /**\n   * Remove SweetAlert2 classes from body\n   */\n  function removeBodyClasses() {\n    removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);\n  }\n\n  /**\n   * Instance method to close sweetAlert\n   *\n   * @param {any} resolveValue\n   */\n  function close(resolveValue) {\n    resolveValue = prepareResolveValue(resolveValue);\n    const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);\n    const didClose = triggerClosePopup(this);\n    if (this.isAwaitingPromise) {\n      // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335\n      if (!resolveValue.isDismissed) {\n        handleAwaitingPromise(this);\n        swalPromiseResolve(resolveValue);\n      }\n    } else if (didClose) {\n      // Resolve Swal promise\n      swalPromiseResolve(resolveValue);\n    }\n  }\n  const triggerClosePopup = instance => {\n    const popup = getPopup();\n    if (!popup) {\n      return false;\n    }\n    const innerParams = privateProps.innerParams.get(instance);\n    if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {\n      return false;\n    }\n    removeClass(popup, innerParams.showClass.popup);\n    addClass(popup, innerParams.hideClass.popup);\n    const backdrop = getContainer();\n    removeClass(backdrop, innerParams.showClass.backdrop);\n    addClass(backdrop, innerParams.hideClass.backdrop);\n    handlePopupAnimation(instance, popup, innerParams);\n    return true;\n  };\n\n  /**\n   * @param {any} error\n   */\n  function rejectPromise(error) {\n    const rejectPromise = privateMethods.swalPromiseReject.get(this);\n    handleAwaitingPromise(this);\n    if (rejectPromise) {\n      // Reject Swal promise\n      rejectPromise(error);\n    }\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const handleAwaitingPromise = instance => {\n    if (instance.isAwaitingPromise) {\n      delete instance.isAwaitingPromise;\n      // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335\n      if (!privateProps.innerParams.get(instance)) {\n        instance._destroy();\n      }\n    }\n  };\n\n  /**\n   * @param {any} resolveValue\n   * @returns {SweetAlertResult}\n   */\n  const prepareResolveValue = resolveValue => {\n    // When user calls Swal.close()\n    if (typeof resolveValue === 'undefined') {\n      return {\n        isConfirmed: false,\n        isDenied: false,\n        isDismissed: true\n      };\n    }\n    return Object.assign({\n      isConfirmed: false,\n      isDenied: false,\n      isDismissed: false\n    }, resolveValue);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {HTMLElement} popup\n   * @param {SweetAlertOptions} innerParams\n   */\n  const handlePopupAnimation = (instance, popup, innerParams) => {\n    var _globalState$eventEmi;\n    const container = getContainer();\n    // If animation is supported, animate\n    const animationIsSupported = hasCssAnimation(popup);\n    if (typeof innerParams.willClose === 'function') {\n      innerParams.willClose(popup);\n    }\n    (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('willClose', popup);\n    if (animationIsSupported) {\n      animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);\n    } else {\n      // Otherwise, remove immediately\n      removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {HTMLElement} popup\n   * @param {HTMLElement} container\n   * @param {boolean} returnFocus\n   * @param {Function} didClose\n   */\n  const animatePopup = (instance, popup, container, returnFocus, didClose) => {\n    globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);\n    /**\n     * @param {AnimationEvent | TransitionEvent} e\n     */\n    const swalCloseAnimationFinished = function (e) {\n      if (e.target === popup) {\n        var _globalState$swalClos;\n        (_globalState$swalClos = globalState.swalCloseEventFinishedCallback) === null || _globalState$swalClos === void 0 || _globalState$swalClos.call(globalState);\n        delete globalState.swalCloseEventFinishedCallback;\n        popup.removeEventListener('animationend', swalCloseAnimationFinished);\n        popup.removeEventListener('transitionend', swalCloseAnimationFinished);\n      }\n    };\n    popup.addEventListener('animationend', swalCloseAnimationFinished);\n    popup.addEventListener('transitionend', swalCloseAnimationFinished);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {Function} didClose\n   */\n  const triggerDidCloseAndDispose = (instance, didClose) => {\n    setTimeout(() => {\n      var _globalState$eventEmi2;\n      if (typeof didClose === 'function') {\n        didClose.bind(instance.params)();\n      }\n      (_globalState$eventEmi2 = globalState.eventEmitter) === null || _globalState$eventEmi2 === void 0 || _globalState$eventEmi2.emit('didClose');\n      // instance might have been destroyed already\n      if (instance._destroy) {\n        instance._destroy();\n      }\n    });\n  };\n\n  /**\n   * Shows loader (spinner), this is useful with AJAX requests.\n   * By default the loader be shown instead of the \"Confirm\" button.\n   *\n   * @param {HTMLButtonElement | null} [buttonToReplace]\n   */\n  const showLoading = buttonToReplace => {\n    let popup = getPopup();\n    if (!popup) {\n      new Swal();\n    }\n    popup = getPopup();\n    if (!popup) {\n      return;\n    }\n    const loader = getLoader();\n    if (isToast()) {\n      hide(getIcon());\n    } else {\n      replaceButton(popup, buttonToReplace);\n    }\n    show(loader);\n    popup.setAttribute('data-loading', 'true');\n    popup.setAttribute('aria-busy', 'true');\n    popup.focus();\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {HTMLButtonElement | null} [buttonToReplace]\n   */\n  const replaceButton = (popup, buttonToReplace) => {\n    const actions = getActions();\n    const loader = getLoader();\n    if (!actions || !loader) {\n      return;\n    }\n    if (!buttonToReplace && isVisible$1(getConfirmButton())) {\n      buttonToReplace = getConfirmButton();\n    }\n    show(actions);\n    if (buttonToReplace) {\n      hide(buttonToReplace);\n      loader.setAttribute('data-button-to-replace', buttonToReplace.className);\n      actions.insertBefore(loader, buttonToReplace);\n    }\n    addClass([popup, actions], swalClasses.loading);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const handleInputOptionsAndValue = (instance, params) => {\n    if (params.input === 'select' || params.input === 'radio') {\n      handleInputOptions(instance, params);\n    } else if (['text', 'email', 'number', 'tel', 'textarea'].some(i => i === params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {\n      showLoading(getConfirmButton());\n      handleInputValue(instance, params);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} innerParams\n   * @returns {SweetAlertInputValue}\n   */\n  const getInputValue = (instance, innerParams) => {\n    const input = instance.getInput();\n    if (!input) {\n      return null;\n    }\n    switch (innerParams.input) {\n      case 'checkbox':\n        return getCheckboxValue(input);\n      case 'radio':\n        return getRadioValue(input);\n      case 'file':\n        return getFileValue(input);\n      default:\n        return innerParams.inputAutoTrim ? input.value.trim() : input.value;\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement} input\n   * @returns {number}\n   */\n  const getCheckboxValue = input => input.checked ? 1 : 0;\n\n  /**\n   * @param {HTMLInputElement} input\n   * @returns {string | null}\n   */\n  const getRadioValue = input => input.checked ? input.value : null;\n\n  /**\n   * @param {HTMLInputElement} input\n   * @returns {FileList | File | null}\n   */\n  const getFileValue = input => input.files && input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const handleInputOptions = (instance, params) => {\n    const popup = getPopup();\n    if (!popup) {\n      return;\n    }\n    /**\n     * @param {Record<string, any>} inputOptions\n     */\n    const processInputOptions = inputOptions => {\n      if (params.input === 'select') {\n        populateSelectOptions(popup, formatInputOptions(inputOptions), params);\n      } else if (params.input === 'radio') {\n        populateRadioOptions(popup, formatInputOptions(inputOptions), params);\n      }\n    };\n    if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {\n      showLoading(getConfirmButton());\n      asPromise(params.inputOptions).then(inputOptions => {\n        instance.hideLoading();\n        processInputOptions(inputOptions);\n      });\n    } else if (typeof params.inputOptions === 'object') {\n      processInputOptions(params.inputOptions);\n    } else {\n      error(`Unexpected type of inputOptions! Expected object, Map or Promise, got ${typeof params.inputOptions}`);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const handleInputValue = (instance, params) => {\n    const input = instance.getInput();\n    if (!input) {\n      return;\n    }\n    hide(input);\n    asPromise(params.inputValue).then(inputValue => {\n      input.value = params.input === 'number' ? `${parseFloat(inputValue) || 0}` : `${inputValue}`;\n      show(input);\n      input.focus();\n      instance.hideLoading();\n    }).catch(err => {\n      error(`Error in inputValue promise: ${err}`);\n      input.value = '';\n      show(input);\n      input.focus();\n      instance.hideLoading();\n    });\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {InputOptionFlattened[]} inputOptions\n   * @param {SweetAlertOptions} params\n   */\n  function populateSelectOptions(popup, inputOptions, params) {\n    const select = getDirectChildByClass(popup, swalClasses.select);\n    if (!select) {\n      return;\n    }\n    /**\n     * @param {HTMLElement} parent\n     * @param {string} optionLabel\n     * @param {string} optionValue\n     */\n    const renderOption = (parent, optionLabel, optionValue) => {\n      const option = document.createElement('option');\n      option.value = optionValue;\n      setInnerHtml(option, optionLabel);\n      option.selected = isSelected(optionValue, params.inputValue);\n      parent.appendChild(option);\n    };\n    inputOptions.forEach(inputOption => {\n      const optionValue = inputOption[0];\n      const optionLabel = inputOption[1];\n      // <optgroup> spec:\n      // https://www.w3.org/TR/html401/interact/forms.html#h-17.6\n      // \"...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)...\"\n      // check whether this is a <optgroup>\n      if (Array.isArray(optionLabel)) {\n        // if it is an array, then it is an <optgroup>\n        const optgroup = document.createElement('optgroup');\n        optgroup.label = optionValue;\n        optgroup.disabled = false; // not configurable for now\n        select.appendChild(optgroup);\n        optionLabel.forEach(o => renderOption(optgroup, o[1], o[0]));\n      } else {\n        // case of <option>\n        renderOption(select, optionLabel, optionValue);\n      }\n    });\n    select.focus();\n  }\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {InputOptionFlattened[]} inputOptions\n   * @param {SweetAlertOptions} params\n   */\n  function populateRadioOptions(popup, inputOptions, params) {\n    const radio = getDirectChildByClass(popup, swalClasses.radio);\n    if (!radio) {\n      return;\n    }\n    inputOptions.forEach(inputOption => {\n      const radioValue = inputOption[0];\n      const radioLabel = inputOption[1];\n      const radioInput = document.createElement('input');\n      const radioLabelElement = document.createElement('label');\n      radioInput.type = 'radio';\n      radioInput.name = swalClasses.radio;\n      radioInput.value = radioValue;\n      if (isSelected(radioValue, params.inputValue)) {\n        radioInput.checked = true;\n      }\n      const label = document.createElement('span');\n      setInnerHtml(label, radioLabel);\n      label.className = swalClasses.label;\n      radioLabelElement.appendChild(radioInput);\n      radioLabelElement.appendChild(label);\n      radio.appendChild(radioLabelElement);\n    });\n    const radios = radio.querySelectorAll('input');\n    if (radios.length) {\n      radios[0].focus();\n    }\n  }\n\n  /**\n   * Converts `inputOptions` into an array of `[value, label]`s\n   *\n   * @param {Record<string, any>} inputOptions\n   * @typedef {string[]} InputOptionFlattened\n   * @returns {InputOptionFlattened[]}\n   */\n  const formatInputOptions = inputOptions => {\n    /** @type {InputOptionFlattened[]} */\n    const result = [];\n    if (inputOptions instanceof Map) {\n      inputOptions.forEach((value, key) => {\n        let valueFormatted = value;\n        if (typeof valueFormatted === 'object') {\n          // case of <optgroup>\n          valueFormatted = formatInputOptions(valueFormatted);\n        }\n        result.push([key, valueFormatted]);\n      });\n    } else {\n      Object.keys(inputOptions).forEach(key => {\n        let valueFormatted = inputOptions[key];\n        if (typeof valueFormatted === 'object') {\n          // case of <optgroup>\n          valueFormatted = formatInputOptions(valueFormatted);\n        }\n        result.push([key, valueFormatted]);\n      });\n    }\n    return result;\n  };\n\n  /**\n   * @param {string} optionValue\n   * @param {SweetAlertInputValue} inputValue\n   * @returns {boolean}\n   */\n  const isSelected = (optionValue, inputValue) => {\n    return !!inputValue && inputValue.toString() === optionValue.toString();\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const handleConfirmButtonClick = instance => {\n    const innerParams = privateProps.innerParams.get(instance);\n    instance.disableButtons();\n    if (innerParams.input) {\n      handleConfirmOrDenyWithInput(instance, 'confirm');\n    } else {\n      confirm(instance, true);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const handleDenyButtonClick = instance => {\n    const innerParams = privateProps.innerParams.get(instance);\n    instance.disableButtons();\n    if (innerParams.returnInputValueOnDeny) {\n      handleConfirmOrDenyWithInput(instance, 'deny');\n    } else {\n      deny(instance, false);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {Function} dismissWith\n   */\n  const handleCancelButtonClick = (instance, dismissWith) => {\n    instance.disableButtons();\n    dismissWith(DismissReason.cancel);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {'confirm' | 'deny'} type\n   */\n  const handleConfirmOrDenyWithInput = (instance, type) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    if (!innerParams.input) {\n      error(`The \"input\" parameter is needed to be set when using returnInputValueOn${capitalizeFirstLetter(type)}`);\n      return;\n    }\n    const input = instance.getInput();\n    const inputValue = getInputValue(instance, innerParams);\n    if (innerParams.inputValidator) {\n      handleInputValidator(instance, inputValue, type);\n    } else if (input && !input.checkValidity()) {\n      instance.enableButtons();\n      instance.showValidationMessage(innerParams.validationMessage || input.validationMessage);\n    } else if (type === 'deny') {\n      deny(instance, inputValue);\n    } else {\n      confirm(instance, inputValue);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertInputValue} inputValue\n   * @param {'confirm' | 'deny'} type\n   */\n  const handleInputValidator = (instance, inputValue, type) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    instance.disableInput();\n    const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage)));\n    validationPromise.then(validationMessage => {\n      instance.enableButtons();\n      instance.enableInput();\n      if (validationMessage) {\n        instance.showValidationMessage(validationMessage);\n      } else if (type === 'deny') {\n        deny(instance, inputValue);\n      } else {\n        confirm(instance, inputValue);\n      }\n    });\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {any} value\n   */\n  const deny = (instance, value) => {\n    const innerParams = privateProps.innerParams.get(instance || undefined);\n    if (innerParams.showLoaderOnDeny) {\n      showLoading(getDenyButton());\n    }\n    if (innerParams.preDeny) {\n      instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preDeny's promise is received\n      const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage)));\n      preDenyPromise.then(preDenyValue => {\n        if (preDenyValue === false) {\n          instance.hideLoading();\n          handleAwaitingPromise(instance);\n        } else {\n          instance.close({\n            isDenied: true,\n            value: typeof preDenyValue === 'undefined' ? value : preDenyValue\n          });\n        }\n      }).catch(error => rejectWith(instance || undefined, error));\n    } else {\n      instance.close({\n        isDenied: true,\n        value\n      });\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {any} value\n   */\n  const succeedWith = (instance, value) => {\n    instance.close({\n      isConfirmed: true,\n      value\n    });\n  };\n\n  /**\n   *\n   * @param {SweetAlert} instance\n   * @param {string} error\n   */\n  const rejectWith = (instance, error) => {\n    instance.rejectPromise(error);\n  };\n\n  /**\n   *\n   * @param {SweetAlert} instance\n   * @param {any} value\n   */\n  const confirm = (instance, value) => {\n    const innerParams = privateProps.innerParams.get(instance || undefined);\n    if (innerParams.showLoaderOnConfirm) {\n      showLoading();\n    }\n    if (innerParams.preConfirm) {\n      instance.resetValidationMessage();\n      instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preConfirm's promise is received\n      const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage)));\n      preConfirmPromise.then(preConfirmValue => {\n        if (isVisible$1(getValidationMessage()) || preConfirmValue === false) {\n          instance.hideLoading();\n          handleAwaitingPromise(instance);\n        } else {\n          succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);\n        }\n      }).catch(error => rejectWith(instance || undefined, error));\n    } else {\n      succeedWith(instance, value);\n    }\n  };\n\n  /**\n   * Hides loader and shows back the button which was hidden by .showLoading()\n   */\n  function hideLoading() {\n    // do nothing if popup is closed\n    const innerParams = privateProps.innerParams.get(this);\n    if (!innerParams) {\n      return;\n    }\n    const domCache = privateProps.domCache.get(this);\n    hide(domCache.loader);\n    if (isToast()) {\n      if (innerParams.icon) {\n        show(getIcon());\n      }\n    } else {\n      showRelatedButton(domCache);\n    }\n    removeClass([domCache.popup, domCache.actions], swalClasses.loading);\n    domCache.popup.removeAttribute('aria-busy');\n    domCache.popup.removeAttribute('data-loading');\n    domCache.confirmButton.disabled = false;\n    domCache.denyButton.disabled = false;\n    domCache.cancelButton.disabled = false;\n  }\n  const showRelatedButton = domCache => {\n    const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));\n    if (buttonToReplace.length) {\n      show(buttonToReplace[0], 'inline-block');\n    } else if (allButtonsAreHidden()) {\n      hide(domCache.actions);\n    }\n  };\n\n  /**\n   * Gets the input DOM node, this method works with input parameter.\n   *\n   * @returns {HTMLInputElement | null}\n   */\n  function getInput() {\n    const innerParams = privateProps.innerParams.get(this);\n    const domCache = privateProps.domCache.get(this);\n    if (!domCache) {\n      return null;\n    }\n    return getInput$1(domCache.popup, innerParams.input);\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {string[]} buttons\n   * @param {boolean} disabled\n   */\n  function setButtonsDisabled(instance, buttons, disabled) {\n    const domCache = privateProps.domCache.get(instance);\n    buttons.forEach(button => {\n      domCache[button].disabled = disabled;\n    });\n  }\n\n  /**\n   * @param {HTMLInputElement | null} input\n   * @param {boolean} disabled\n   */\n  function setInputDisabled(input, disabled) {\n    const popup = getPopup();\n    if (!popup || !input) {\n      return;\n    }\n    if (input.type === 'radio') {\n      /** @type {NodeListOf<HTMLInputElement>} */\n      const radios = popup.querySelectorAll(`[name=\"${swalClasses.radio}\"]`);\n      for (let i = 0; i < radios.length; i++) {\n        radios[i].disabled = disabled;\n      }\n    } else {\n      input.disabled = disabled;\n    }\n  }\n\n  /**\n   * Enable all the buttons\n   * @this {SweetAlert}\n   */\n  function enableButtons() {\n    setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);\n  }\n\n  /**\n   * Disable all the buttons\n   * @this {SweetAlert}\n   */\n  function disableButtons() {\n    setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);\n  }\n\n  /**\n   * Enable the input field\n   * @this {SweetAlert}\n   */\n  function enableInput() {\n    setInputDisabled(this.getInput(), false);\n  }\n\n  /**\n   * Disable the input field\n   * @this {SweetAlert}\n   */\n  function disableInput() {\n    setInputDisabled(this.getInput(), true);\n  }\n\n  /**\n   * Show block with validation message\n   *\n   * @param {string} error\n   * @this {SweetAlert}\n   */\n  function showValidationMessage(error) {\n    const domCache = privateProps.domCache.get(this);\n    const params = privateProps.innerParams.get(this);\n    setInnerHtml(domCache.validationMessage, error);\n    domCache.validationMessage.className = swalClasses['validation-message'];\n    if (params.customClass && params.customClass.validationMessage) {\n      addClass(domCache.validationMessage, params.customClass.validationMessage);\n    }\n    show(domCache.validationMessage);\n    const input = this.getInput();\n    if (input) {\n      input.setAttribute('aria-invalid', 'true');\n      input.setAttribute('aria-describedby', swalClasses['validation-message']);\n      focusInput(input);\n      addClass(input, swalClasses.inputerror);\n    }\n  }\n\n  /**\n   * Hide block with validation message\n   *\n   * @this {SweetAlert}\n   */\n  function resetValidationMessage() {\n    const domCache = privateProps.domCache.get(this);\n    if (domCache.validationMessage) {\n      hide(domCache.validationMessage);\n    }\n    const input = this.getInput();\n    if (input) {\n      input.removeAttribute('aria-invalid');\n      input.removeAttribute('aria-describedby');\n      removeClass(input, swalClasses.inputerror);\n    }\n  }\n\n  const defaultParams = {\n    title: '',\n    titleText: '',\n    text: '',\n    html: '',\n    footer: '',\n    icon: undefined,\n    iconColor: undefined,\n    iconHtml: undefined,\n    template: undefined,\n    toast: false,\n    draggable: false,\n    animation: true,\n    theme: 'light',\n    showClass: {\n      popup: 'swal2-show',\n      backdrop: 'swal2-backdrop-show',\n      icon: 'swal2-icon-show'\n    },\n    hideClass: {\n      popup: 'swal2-hide',\n      backdrop: 'swal2-backdrop-hide',\n      icon: 'swal2-icon-hide'\n    },\n    customClass: {},\n    target: 'body',\n    color: undefined,\n    backdrop: true,\n    heightAuto: true,\n    allowOutsideClick: true,\n    allowEscapeKey: true,\n    allowEnterKey: true,\n    stopKeydownPropagation: true,\n    keydownListenerCapture: false,\n    showConfirmButton: true,\n    showDenyButton: false,\n    showCancelButton: false,\n    preConfirm: undefined,\n    preDeny: undefined,\n    confirmButtonText: 'OK',\n    confirmButtonAriaLabel: '',\n    confirmButtonColor: undefined,\n    denyButtonText: 'No',\n    denyButtonAriaLabel: '',\n    denyButtonColor: undefined,\n    cancelButtonText: 'Cancel',\n    cancelButtonAriaLabel: '',\n    cancelButtonColor: undefined,\n    buttonsStyling: true,\n    reverseButtons: false,\n    focusConfirm: true,\n    focusDeny: false,\n    focusCancel: false,\n    returnFocus: true,\n    showCloseButton: false,\n    closeButtonHtml: '&times;',\n    closeButtonAriaLabel: 'Close this dialog',\n    loaderHtml: '',\n    showLoaderOnConfirm: false,\n    showLoaderOnDeny: false,\n    imageUrl: undefined,\n    imageWidth: undefined,\n    imageHeight: undefined,\n    imageAlt: '',\n    timer: undefined,\n    timerProgressBar: false,\n    width: undefined,\n    padding: undefined,\n    background: undefined,\n    input: undefined,\n    inputPlaceholder: '',\n    inputLabel: '',\n    inputValue: '',\n    inputOptions: {},\n    inputAutoFocus: true,\n    inputAutoTrim: true,\n    inputAttributes: {},\n    inputValidator: undefined,\n    returnInputValueOnDeny: false,\n    validationMessage: undefined,\n    grow: false,\n    position: 'center',\n    progressSteps: [],\n    currentProgressStep: undefined,\n    progressStepsDistance: undefined,\n    willOpen: undefined,\n    didOpen: undefined,\n    didRender: undefined,\n    willClose: undefined,\n    didClose: undefined,\n    didDestroy: undefined,\n    scrollbarPadding: true,\n    topLayer: false\n  };\n  const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'draggable', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'theme', 'willClose'];\n\n  /** @type {Record<string, string | undefined>} */\n  const deprecatedParams = {\n    allowEnterKey: undefined\n  };\n  const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'draggable', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];\n\n  /**\n   * Is valid parameter\n   *\n   * @param {string} paramName\n   * @returns {boolean}\n   */\n  const isValidParameter = paramName => {\n    return Object.prototype.hasOwnProperty.call(defaultParams, paramName);\n  };\n\n  /**\n   * Is valid parameter for Swal.update() method\n   *\n   * @param {string} paramName\n   * @returns {boolean}\n   */\n  const isUpdatableParameter = paramName => {\n    return updatableParams.indexOf(paramName) !== -1;\n  };\n\n  /**\n   * Is deprecated parameter\n   *\n   * @param {string} paramName\n   * @returns {string | undefined}\n   */\n  const isDeprecatedParameter = paramName => {\n    return deprecatedParams[paramName];\n  };\n\n  /**\n   * @param {string} param\n   */\n  const checkIfParamIsValid = param => {\n    if (!isValidParameter(param)) {\n      warn(`Unknown parameter \"${param}\"`);\n    }\n  };\n\n  /**\n   * @param {string} param\n   */\n  const checkIfToastParamIsValid = param => {\n    if (toastIncompatibleParams.includes(param)) {\n      warn(`The parameter \"${param}\" is incompatible with toasts`);\n    }\n  };\n\n  /**\n   * @param {string} param\n   */\n  const checkIfParamIsDeprecated = param => {\n    const isDeprecated = isDeprecatedParameter(param);\n    if (isDeprecated) {\n      warnAboutDeprecation(param, isDeprecated);\n    }\n  };\n\n  /**\n   * Show relevant warnings for given params\n   *\n   * @param {SweetAlertOptions} params\n   */\n  const showWarningsForParams = params => {\n    if (params.backdrop === false && params.allowOutsideClick) {\n      warn('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`');\n    }\n    if (params.theme && !['light', 'dark', 'auto', 'minimal', 'borderless', 'embed-iframe', 'bulma', 'bulma-light', 'bulma-dark'].includes(params.theme)) {\n      warn(`Invalid theme \"${params.theme}\"`);\n    }\n    for (const param in params) {\n      checkIfParamIsValid(param);\n      if (params.toast) {\n        checkIfToastParamIsValid(param);\n      }\n      checkIfParamIsDeprecated(param);\n    }\n  };\n\n  /**\n   * Updates popup parameters.\n   *\n   * @param {SweetAlertOptions} params\n   */\n  function update(params) {\n    const container = getContainer();\n    const popup = getPopup();\n    const innerParams = privateProps.innerParams.get(this);\n    if (!popup || hasClass(popup, innerParams.hideClass.popup)) {\n      warn(`You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.`);\n      return;\n    }\n    const validUpdatableParams = filterValidParams(params);\n    const updatedParams = Object.assign({}, innerParams, validUpdatableParams);\n    showWarningsForParams(updatedParams);\n    container.dataset['swal2Theme'] = updatedParams.theme;\n    render(this, updatedParams);\n    privateProps.innerParams.set(this, updatedParams);\n    Object.defineProperties(this, {\n      params: {\n        value: Object.assign({}, this.params, params),\n        writable: false,\n        enumerable: true\n      }\n    });\n  }\n\n  /**\n   * @param {SweetAlertOptions} params\n   * @returns {SweetAlertOptions}\n   */\n  const filterValidParams = params => {\n    const validUpdatableParams = {};\n    Object.keys(params).forEach(param => {\n      if (isUpdatableParameter(param)) {\n        validUpdatableParams[param] = params[param];\n      } else {\n        warn(`Invalid parameter to update: ${param}`);\n      }\n    });\n    return validUpdatableParams;\n  };\n\n  /**\n   * Dispose the current SweetAlert2 instance\n   */\n  function _destroy() {\n    const domCache = privateProps.domCache.get(this);\n    const innerParams = privateProps.innerParams.get(this);\n    if (!innerParams) {\n      disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335\n      return; // This instance has already been destroyed\n    }\n\n    // Check if there is another Swal closing\n    if (domCache.popup && globalState.swalCloseEventFinishedCallback) {\n      globalState.swalCloseEventFinishedCallback();\n      delete globalState.swalCloseEventFinishedCallback;\n    }\n    if (typeof innerParams.didDestroy === 'function') {\n      innerParams.didDestroy();\n    }\n    globalState.eventEmitter.emit('didDestroy');\n    disposeSwal(this);\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const disposeSwal = instance => {\n    disposeWeakMaps(instance);\n    // Unset this.params so GC will dispose it (#1569)\n    delete instance.params;\n    // Unset globalState props so GC will dispose globalState (#1569)\n    delete globalState.keydownHandler;\n    delete globalState.keydownTarget;\n    // Unset currentInstance\n    delete globalState.currentInstance;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const disposeWeakMaps = instance => {\n    // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335\n    if (instance.isAwaitingPromise) {\n      unsetWeakMaps(privateProps, instance);\n      instance.isAwaitingPromise = true;\n    } else {\n      unsetWeakMaps(privateMethods, instance);\n      unsetWeakMaps(privateProps, instance);\n      delete instance.isAwaitingPromise;\n      // Unset instance methods\n      delete instance.disableButtons;\n      delete instance.enableButtons;\n      delete instance.getInput;\n      delete instance.disableInput;\n      delete instance.enableInput;\n      delete instance.hideLoading;\n      delete instance.disableLoading;\n      delete instance.showValidationMessage;\n      delete instance.resetValidationMessage;\n      delete instance.close;\n      delete instance.closePopup;\n      delete instance.closeModal;\n      delete instance.closeToast;\n      delete instance.rejectPromise;\n      delete instance.update;\n      delete instance._destroy;\n    }\n  };\n\n  /**\n   * @param {object} obj\n   * @param {SweetAlert} instance\n   */\n  const unsetWeakMaps = (obj, instance) => {\n    for (const i in obj) {\n      obj[i].delete(instance);\n    }\n  };\n\n  var instanceMethods = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    _destroy: _destroy,\n    close: close,\n    closeModal: close,\n    closePopup: close,\n    closeToast: close,\n    disableButtons: disableButtons,\n    disableInput: disableInput,\n    disableLoading: hideLoading,\n    enableButtons: enableButtons,\n    enableInput: enableInput,\n    getInput: getInput,\n    handleAwaitingPromise: handleAwaitingPromise,\n    hideLoading: hideLoading,\n    rejectPromise: rejectPromise,\n    resetValidationMessage: resetValidationMessage,\n    showValidationMessage: showValidationMessage,\n    update: update\n  });\n\n  /**\n   * @param {SweetAlertOptions} innerParams\n   * @param {DomCache} domCache\n   * @param {Function} dismissWith\n   */\n  const handlePopupClick = (innerParams, domCache, dismissWith) => {\n    if (innerParams.toast) {\n      handleToastClick(innerParams, domCache, dismissWith);\n    } else {\n      // Ignore click events that had mousedown on the popup but mouseup on the container\n      // This can happen when the user drags a slider\n      handleModalMousedown(domCache);\n\n      // Ignore click events that had mousedown on the container but mouseup on the popup\n      handleContainerMousedown(domCache);\n      handleModalClick(innerParams, domCache, dismissWith);\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} innerParams\n   * @param {DomCache} domCache\n   * @param {Function} dismissWith\n   */\n  const handleToastClick = (innerParams, domCache, dismissWith) => {\n    // Closing toast by internal click\n    domCache.popup.onclick = () => {\n      if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {\n        return;\n      }\n      dismissWith(DismissReason.close);\n    };\n  };\n\n  /**\n   * @param {SweetAlertOptions} innerParams\n   * @returns {boolean}\n   */\n  const isAnyButtonShown = innerParams => {\n    return !!(innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton);\n  };\n  let ignoreOutsideClick = false;\n\n  /**\n   * @param {DomCache} domCache\n   */\n  const handleModalMousedown = domCache => {\n    domCache.popup.onmousedown = () => {\n      domCache.container.onmouseup = function (e) {\n        domCache.container.onmouseup = () => {};\n        // We only check if the mouseup target is the container because usually it doesn't\n        // have any other direct children aside of the popup\n        if (e.target === domCache.container) {\n          ignoreOutsideClick = true;\n        }\n      };\n    };\n  };\n\n  /**\n   * @param {DomCache} domCache\n   */\n  const handleContainerMousedown = domCache => {\n    domCache.container.onmousedown = e => {\n      // prevent the modal text from being selected on double click on the container (allowOutsideClick: false)\n      if (e.target === domCache.container) {\n        e.preventDefault();\n      }\n      domCache.popup.onmouseup = function (e) {\n        domCache.popup.onmouseup = () => {};\n        // We also need to check if the mouseup target is a child of the popup\n        if (e.target === domCache.popup || e.target instanceof HTMLElement && domCache.popup.contains(e.target)) {\n          ignoreOutsideClick = true;\n        }\n      };\n    };\n  };\n\n  /**\n   * @param {SweetAlertOptions} innerParams\n   * @param {DomCache} domCache\n   * @param {Function} dismissWith\n   */\n  const handleModalClick = (innerParams, domCache, dismissWith) => {\n    domCache.container.onclick = e => {\n      if (ignoreOutsideClick) {\n        ignoreOutsideClick = false;\n        return;\n      }\n      if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {\n        dismissWith(DismissReason.backdrop);\n      }\n    };\n  };\n\n  const isJqueryElement = elem => typeof elem === 'object' && elem.jquery;\n  const isElement = elem => elem instanceof Element || isJqueryElement(elem);\n  const argsToParams = args => {\n    const params = {};\n    if (typeof args[0] === 'object' && !isElement(args[0])) {\n      Object.assign(params, args[0]);\n    } else {\n      ['title', 'html', 'icon'].forEach((name, index) => {\n        const arg = args[index];\n        if (typeof arg === 'string' || isElement(arg)) {\n          params[name] = arg;\n        } else if (arg !== undefined) {\n          error(`Unexpected type of ${name}! Expected \"string\" or \"Element\", got ${typeof arg}`);\n        }\n      });\n    }\n    return params;\n  };\n\n  /**\n   * Main method to create a new SweetAlert2 popup\n   *\n   * @param  {...SweetAlertOptions} args\n   * @returns {Promise<SweetAlertResult>}\n   */\n  function fire(...args) {\n    return new this(...args);\n  }\n\n  /**\n   * Returns an extended version of `Swal` containing `params` as defaults.\n   * Useful for reusing Swal configuration.\n   *\n   * For example:\n   *\n   * Before:\n   * const textPromptOptions = { input: 'text', showCancelButton: true }\n   * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' })\n   * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' })\n   *\n   * After:\n   * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true })\n   * const {value: firstName} = await TextPrompt('What is your first name?')\n   * const {value: lastName} = await TextPrompt('What is your last name?')\n   *\n   * @param {SweetAlertOptions} mixinParams\n   * @returns {SweetAlert}\n   */\n  function mixin(mixinParams) {\n    class MixinSwal extends this {\n      _main(params, priorityMixinParams) {\n        return super._main(params, Object.assign({}, mixinParams, priorityMixinParams));\n      }\n    }\n    // @ts-ignore\n    return MixinSwal;\n  }\n\n  /**\n   * If `timer` parameter is set, returns number of milliseconds of timer remained.\n   * Otherwise, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const getTimerLeft = () => {\n    return globalState.timeout && globalState.timeout.getTimerLeft();\n  };\n\n  /**\n   * Stop timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const stopTimer = () => {\n    if (globalState.timeout) {\n      stopTimerProgressBar();\n      return globalState.timeout.stop();\n    }\n  };\n\n  /**\n   * Resume timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const resumeTimer = () => {\n    if (globalState.timeout) {\n      const remaining = globalState.timeout.start();\n      animateTimerProgressBar(remaining);\n      return remaining;\n    }\n  };\n\n  /**\n   * Resume timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const toggleTimer = () => {\n    const timer = globalState.timeout;\n    return timer && (timer.running ? stopTimer() : resumeTimer());\n  };\n\n  /**\n   * Increase timer. Returns number of milliseconds of an updated timer.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @param {number} ms\n   * @returns {number | undefined}\n   */\n  const increaseTimer = ms => {\n    if (globalState.timeout) {\n      const remaining = globalState.timeout.increase(ms);\n      animateTimerProgressBar(remaining, true);\n      return remaining;\n    }\n  };\n\n  /**\n   * Check if timer is running. Returns true if timer is running\n   * or false if timer is paused or stopped.\n   * If `timer` parameter isn't set, returns undefined\n   *\n   * @returns {boolean}\n   */\n  const isTimerRunning = () => {\n    return !!(globalState.timeout && globalState.timeout.isRunning());\n  };\n\n  let bodyClickListenerAdded = false;\n  const clickHandlers = {};\n\n  /**\n   * @param {string} attr\n   */\n  function bindClickHandler(attr = 'data-swal-template') {\n    clickHandlers[attr] = this;\n    if (!bodyClickListenerAdded) {\n      document.body.addEventListener('click', bodyClickListener);\n      bodyClickListenerAdded = true;\n    }\n  }\n  const bodyClickListener = event => {\n    for (let el = event.target; el && el !== document; el = el.parentNode) {\n      for (const attr in clickHandlers) {\n        const template = el.getAttribute(attr);\n        if (template) {\n          clickHandlers[attr].fire({\n            template\n          });\n          return;\n        }\n      }\n    }\n  };\n\n  // Source: https://gist.github.com/mudge/5830382?permalink_comment_id=2691957#gistcomment-2691957\n\n  class EventEmitter {\n    constructor() {\n      /** @type {Events} */\n      this.events = {};\n    }\n\n    /**\n     * @param {string} eventName\n     * @returns {EventHandlers}\n     */\n    _getHandlersByEventName(eventName) {\n      if (typeof this.events[eventName] === 'undefined') {\n        // not Set because we need to keep the FIFO order\n        // https://github.com/sweetalert2/sweetalert2/pull/2763#discussion_r1748990334\n        this.events[eventName] = [];\n      }\n      return this.events[eventName];\n    }\n\n    /**\n     * @param {string} eventName\n     * @param {EventHandler} eventHandler\n     */\n    on(eventName, eventHandler) {\n      const currentHandlers = this._getHandlersByEventName(eventName);\n      if (!currentHandlers.includes(eventHandler)) {\n        currentHandlers.push(eventHandler);\n      }\n    }\n\n    /**\n     * @param {string} eventName\n     * @param {EventHandler} eventHandler\n     */\n    once(eventName, eventHandler) {\n      /**\n       * @param {Array} args\n       */\n      const onceFn = (...args) => {\n        this.removeListener(eventName, onceFn);\n        eventHandler.apply(this, args);\n      };\n      this.on(eventName, onceFn);\n    }\n\n    /**\n     * @param {string} eventName\n     * @param {Array} args\n     */\n    emit(eventName, ...args) {\n      this._getHandlersByEventName(eventName).forEach(\n      /**\n       * @param {EventHandler} eventHandler\n       */\n      eventHandler => {\n        try {\n          eventHandler.apply(this, args);\n        } catch (error) {\n          console.error(error);\n        }\n      });\n    }\n\n    /**\n     * @param {string} eventName\n     * @param {EventHandler} eventHandler\n     */\n    removeListener(eventName, eventHandler) {\n      const currentHandlers = this._getHandlersByEventName(eventName);\n      const index = currentHandlers.indexOf(eventHandler);\n      if (index > -1) {\n        currentHandlers.splice(index, 1);\n      }\n    }\n\n    /**\n     * @param {string} eventName\n     */\n    removeAllListeners(eventName) {\n      if (this.events[eventName] !== undefined) {\n        // https://github.com/sweetalert2/sweetalert2/pull/2763#discussion_r1749239222\n        this.events[eventName].length = 0;\n      }\n    }\n    reset() {\n      this.events = {};\n    }\n  }\n\n  globalState.eventEmitter = new EventEmitter();\n\n  /**\n   * @param {string} eventName\n   * @param {EventHandler} eventHandler\n   */\n  const on = (eventName, eventHandler) => {\n    globalState.eventEmitter.on(eventName, eventHandler);\n  };\n\n  /**\n   * @param {string} eventName\n   * @param {EventHandler} eventHandler\n   */\n  const once = (eventName, eventHandler) => {\n    globalState.eventEmitter.once(eventName, eventHandler);\n  };\n\n  /**\n   * @param {string} [eventName]\n   * @param {EventHandler} [eventHandler]\n   */\n  const off = (eventName, eventHandler) => {\n    // Remove all handlers for all events\n    if (!eventName) {\n      globalState.eventEmitter.reset();\n      return;\n    }\n    if (eventHandler) {\n      // Remove a specific handler\n      globalState.eventEmitter.removeListener(eventName, eventHandler);\n    } else {\n      // Remove all handlers for a specific event\n      globalState.eventEmitter.removeAllListeners(eventName);\n    }\n  };\n\n  var staticMethods = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    argsToParams: argsToParams,\n    bindClickHandler: bindClickHandler,\n    clickCancel: clickCancel,\n    clickConfirm: clickConfirm,\n    clickDeny: clickDeny,\n    enableLoading: showLoading,\n    fire: fire,\n    getActions: getActions,\n    getCancelButton: getCancelButton,\n    getCloseButton: getCloseButton,\n    getConfirmButton: getConfirmButton,\n    getContainer: getContainer,\n    getDenyButton: getDenyButton,\n    getFocusableElements: getFocusableElements,\n    getFooter: getFooter,\n    getHtmlContainer: getHtmlContainer,\n    getIcon: getIcon,\n    getIconContent: getIconContent,\n    getImage: getImage,\n    getInputLabel: getInputLabel,\n    getLoader: getLoader,\n    getPopup: getPopup,\n    getProgressSteps: getProgressSteps,\n    getTimerLeft: getTimerLeft,\n    getTimerProgressBar: getTimerProgressBar,\n    getTitle: getTitle,\n    getValidationMessage: getValidationMessage,\n    increaseTimer: increaseTimer,\n    isDeprecatedParameter: isDeprecatedParameter,\n    isLoading: isLoading,\n    isTimerRunning: isTimerRunning,\n    isUpdatableParameter: isUpdatableParameter,\n    isValidParameter: isValidParameter,\n    isVisible: isVisible,\n    mixin: mixin,\n    off: off,\n    on: on,\n    once: once,\n    resumeTimer: resumeTimer,\n    showLoading: showLoading,\n    stopTimer: stopTimer,\n    toggleTimer: toggleTimer\n  });\n\n  class Timer {\n    /**\n     * @param {Function} callback\n     * @param {number} delay\n     */\n    constructor(callback, delay) {\n      this.callback = callback;\n      this.remaining = delay;\n      this.running = false;\n      this.start();\n    }\n\n    /**\n     * @returns {number}\n     */\n    start() {\n      if (!this.running) {\n        this.running = true;\n        this.started = new Date();\n        this.id = setTimeout(this.callback, this.remaining);\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @returns {number}\n     */\n    stop() {\n      if (this.started && this.running) {\n        this.running = false;\n        clearTimeout(this.id);\n        this.remaining -= new Date().getTime() - this.started.getTime();\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @param {number} n\n     * @returns {number}\n     */\n    increase(n) {\n      const running = this.running;\n      if (running) {\n        this.stop();\n      }\n      this.remaining += n;\n      if (running) {\n        this.start();\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @returns {number}\n     */\n    getTimerLeft() {\n      if (this.running) {\n        this.stop();\n        this.start();\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @returns {boolean}\n     */\n    isRunning() {\n      return this.running;\n    }\n  }\n\n  const swalStringParams = ['swal-title', 'swal-html', 'swal-footer'];\n\n  /**\n   * @param {SweetAlertOptions} params\n   * @returns {SweetAlertOptions}\n   */\n  const getTemplateParams = params => {\n    const template = typeof params.template === 'string' ? (/** @type {HTMLTemplateElement} */document.querySelector(params.template)) : params.template;\n    if (!template) {\n      return {};\n    }\n    /** @type {DocumentFragment} */\n    const templateContent = template.content;\n    showWarningsForElements(templateContent);\n    const result = Object.assign(getSwalParams(templateContent), getSwalFunctionParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams));\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {Record<string, any>}\n   */\n  const getSwalParams = templateContent => {\n    /** @type {Record<string, any>} */\n    const result = {};\n    /** @type {HTMLElement[]} */\n    const swalParams = Array.from(templateContent.querySelectorAll('swal-param'));\n    swalParams.forEach(param => {\n      showWarningsForAttributes(param, ['name', 'value']);\n      const paramName = /** @type {keyof SweetAlertOptions} */param.getAttribute('name');\n      const value = param.getAttribute('value');\n      if (!paramName || !value) {\n        return;\n      }\n      if (typeof defaultParams[paramName] === 'boolean') {\n        result[paramName] = value !== 'false';\n      } else if (typeof defaultParams[paramName] === 'object') {\n        result[paramName] = JSON.parse(value);\n      } else {\n        result[paramName] = value;\n      }\n    });\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {Record<string, any>}\n   */\n  const getSwalFunctionParams = templateContent => {\n    /** @type {Record<string, any>} */\n    const result = {};\n    /** @type {HTMLElement[]} */\n    const swalFunctions = Array.from(templateContent.querySelectorAll('swal-function-param'));\n    swalFunctions.forEach(param => {\n      const paramName = /** @type {keyof SweetAlertOptions} */param.getAttribute('name');\n      const value = param.getAttribute('value');\n      if (!paramName || !value) {\n        return;\n      }\n      result[paramName] = new Function(`return ${value}`)();\n    });\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {Record<string, any>}\n   */\n  const getSwalButtons = templateContent => {\n    /** @type {Record<string, any>} */\n    const result = {};\n    /** @type {HTMLElement[]} */\n    const swalButtons = Array.from(templateContent.querySelectorAll('swal-button'));\n    swalButtons.forEach(button => {\n      showWarningsForAttributes(button, ['type', 'color', 'aria-label']);\n      const type = button.getAttribute('type');\n      if (!type || !['confirm', 'cancel', 'deny'].includes(type)) {\n        return;\n      }\n      result[`${type}ButtonText`] = button.innerHTML;\n      result[`show${capitalizeFirstLetter(type)}Button`] = true;\n      if (button.hasAttribute('color')) {\n        result[`${type}ButtonColor`] = button.getAttribute('color');\n      }\n      if (button.hasAttribute('aria-label')) {\n        result[`${type}ButtonAriaLabel`] = button.getAttribute('aria-label');\n      }\n    });\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {Pick<SweetAlertOptions, 'imageUrl' | 'imageWidth' | 'imageHeight' | 'imageAlt'>}\n   */\n  const getSwalImage = templateContent => {\n    const result = {};\n    /** @type {HTMLElement | null} */\n    const image = templateContent.querySelector('swal-image');\n    if (image) {\n      showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']);\n      if (image.hasAttribute('src')) {\n        result.imageUrl = image.getAttribute('src') || undefined;\n      }\n      if (image.hasAttribute('width')) {\n        result.imageWidth = image.getAttribute('width') || undefined;\n      }\n      if (image.hasAttribute('height')) {\n        result.imageHeight = image.getAttribute('height') || undefined;\n      }\n      if (image.hasAttribute('alt')) {\n        result.imageAlt = image.getAttribute('alt') || undefined;\n      }\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {Record<string, any>}\n   */\n  const getSwalIcon = templateContent => {\n    const result = {};\n    /** @type {HTMLElement | null} */\n    const icon = templateContent.querySelector('swal-icon');\n    if (icon) {\n      showWarningsForAttributes(icon, ['type', 'color']);\n      if (icon.hasAttribute('type')) {\n        result.icon = icon.getAttribute('type');\n      }\n      if (icon.hasAttribute('color')) {\n        result.iconColor = icon.getAttribute('color');\n      }\n      result.iconHtml = icon.innerHTML;\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {Record<string, any>}\n   */\n  const getSwalInput = templateContent => {\n    /** @type {Record<string, any>} */\n    const result = {};\n    /** @type {HTMLElement | null} */\n    const input = templateContent.querySelector('swal-input');\n    if (input) {\n      showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']);\n      result.input = input.getAttribute('type') || 'text';\n      if (input.hasAttribute('label')) {\n        result.inputLabel = input.getAttribute('label');\n      }\n      if (input.hasAttribute('placeholder')) {\n        result.inputPlaceholder = input.getAttribute('placeholder');\n      }\n      if (input.hasAttribute('value')) {\n        result.inputValue = input.getAttribute('value');\n      }\n    }\n    /** @type {HTMLElement[]} */\n    const inputOptions = Array.from(templateContent.querySelectorAll('swal-input-option'));\n    if (inputOptions.length) {\n      result.inputOptions = {};\n      inputOptions.forEach(option => {\n        showWarningsForAttributes(option, ['value']);\n        const optionValue = option.getAttribute('value');\n        if (!optionValue) {\n          return;\n        }\n        const optionName = option.innerHTML;\n        result.inputOptions[optionValue] = optionName;\n      });\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @param {string[]} paramNames\n   * @returns {Record<string, any>}\n   */\n  const getSwalStringParams = (templateContent, paramNames) => {\n    /** @type {Record<string, any>} */\n    const result = {};\n    for (const i in paramNames) {\n      const paramName = paramNames[i];\n      /** @type {HTMLElement | null} */\n      const tag = templateContent.querySelector(paramName);\n      if (tag) {\n        showWarningsForAttributes(tag, []);\n        result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim();\n      }\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   */\n  const showWarningsForElements = templateContent => {\n    const allowedElements = swalStringParams.concat(['swal-param', 'swal-function-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']);\n    Array.from(templateContent.children).forEach(el => {\n      const tagName = el.tagName.toLowerCase();\n      if (!allowedElements.includes(tagName)) {\n        warn(`Unrecognized element <${tagName}>`);\n      }\n    });\n  };\n\n  /**\n   * @param {HTMLElement} el\n   * @param {string[]} allowedAttributes\n   */\n  const showWarningsForAttributes = (el, allowedAttributes) => {\n    Array.from(el.attributes).forEach(attribute => {\n      if (allowedAttributes.indexOf(attribute.name) === -1) {\n        warn([`Unrecognized attribute \"${attribute.name}\" on <${el.tagName.toLowerCase()}>.`, `${allowedAttributes.length ? `Allowed attributes are: ${allowedAttributes.join(', ')}` : 'To set the value, use HTML within the element.'}`]);\n      }\n    });\n  };\n\n  const SHOW_CLASS_TIMEOUT = 10;\n\n  /**\n   * Open popup, add necessary classes and styles, fix scrollbar\n   *\n   * @param {SweetAlertOptions} params\n   */\n  const openPopup = params => {\n    const container = getContainer();\n    const popup = getPopup();\n    if (typeof params.willOpen === 'function') {\n      params.willOpen(popup);\n    }\n    globalState.eventEmitter.emit('willOpen', popup);\n    const bodyStyles = window.getComputedStyle(document.body);\n    const initialBodyOverflow = bodyStyles.overflowY;\n    addClasses(container, popup, params);\n\n    // scrolling is 'hidden' until animation is done, after that 'auto'\n    setTimeout(() => {\n      setScrollingVisibility(container, popup);\n    }, SHOW_CLASS_TIMEOUT);\n    if (isModal()) {\n      fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow);\n      setAriaHidden();\n    }\n    if (!isToast() && !globalState.previousActiveElement) {\n      globalState.previousActiveElement = document.activeElement;\n    }\n    if (typeof params.didOpen === 'function') {\n      setTimeout(() => params.didOpen(popup));\n    }\n    globalState.eventEmitter.emit('didOpen', popup);\n    removeClass(container, swalClasses['no-transition']);\n  };\n\n  /**\n   * @param {AnimationEvent} event\n   */\n  const swalOpenAnimationFinished = event => {\n    const popup = getPopup();\n    if (event.target !== popup) {\n      return;\n    }\n    const container = getContainer();\n    popup.removeEventListener('animationend', swalOpenAnimationFinished);\n    popup.removeEventListener('transitionend', swalOpenAnimationFinished);\n    container.style.overflowY = 'auto';\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {HTMLElement} popup\n   */\n  const setScrollingVisibility = (container, popup) => {\n    if (hasCssAnimation(popup)) {\n      container.style.overflowY = 'hidden';\n      popup.addEventListener('animationend', swalOpenAnimationFinished);\n      popup.addEventListener('transitionend', swalOpenAnimationFinished);\n    } else {\n      container.style.overflowY = 'auto';\n    }\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {boolean} scrollbarPadding\n   * @param {string} initialBodyOverflow\n   */\n  const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => {\n    iOSfix();\n    if (scrollbarPadding && initialBodyOverflow !== 'hidden') {\n      replaceScrollbarWithPadding(initialBodyOverflow);\n    }\n\n    // sweetalert2/issues/1247\n    setTimeout(() => {\n      container.scrollTop = 0;\n    });\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {HTMLElement} popup\n   * @param {SweetAlertOptions} params\n   */\n  const addClasses = (container, popup, params) => {\n    addClass(container, params.showClass.backdrop);\n    if (params.animation) {\n      // this workaround with opacity is needed for https://github.com/sweetalert2/sweetalert2/issues/2059\n      popup.style.setProperty('opacity', '0', 'important');\n      show(popup, 'grid');\n      setTimeout(() => {\n        // Animate popup right after showing it\n        addClass(popup, params.showClass.popup);\n        // and remove the opacity workaround\n        popup.style.removeProperty('opacity');\n      }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062\n    } else {\n      show(popup, 'grid');\n    }\n    addClass([document.documentElement, document.body], swalClasses.shown);\n    if (params.heightAuto && params.backdrop && !params.toast) {\n      addClass([document.documentElement, document.body], swalClasses['height-auto']);\n    }\n  };\n\n  var defaultInputValidators = {\n    /**\n     * @param {string} string\n     * @param {string} [validationMessage]\n     * @returns {Promise<string | void>}\n     */\n    email: (string, validationMessage) => {\n      return /^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address');\n    },\n    /**\n     * @param {string} string\n     * @param {string} [validationMessage]\n     * @returns {Promise<string | void>}\n     */\n    url: (string, validationMessage) => {\n      // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013\n      return /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL');\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  function setDefaultInputValidators(params) {\n    // Use default `inputValidator` for supported input types if not provided\n    if (params.inputValidator) {\n      return;\n    }\n    if (params.input === 'email') {\n      params.inputValidator = defaultInputValidators['email'];\n    }\n    if (params.input === 'url') {\n      params.inputValidator = defaultInputValidators['url'];\n    }\n  }\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  function validateCustomTargetElement(params) {\n    // Determine if the custom target element is valid\n    if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) {\n      warn('Target parameter is not valid, defaulting to \"body\"');\n      params.target = 'body';\n    }\n  }\n\n  /**\n   * Set type, text and actions on popup\n   *\n   * @param {SweetAlertOptions} params\n   */\n  function setParameters(params) {\n    setDefaultInputValidators(params);\n\n    // showLoaderOnConfirm && preConfirm\n    if (params.showLoaderOnConfirm && !params.preConfirm) {\n      warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\\n' + 'https://sweetalert2.github.io/#ajax-request');\n    }\n    validateCustomTargetElement(params);\n\n    // Replace newlines with <br> in title\n    if (typeof params.title === 'string') {\n      params.title = params.title.split('\\n').join('<br />');\n    }\n    init(params);\n  }\n\n  /** @type {SweetAlert} */\n  let currentInstance;\n  var _promise = /*#__PURE__*/new WeakMap();\n  class SweetAlert {\n    /**\n     * @param {...any} args\n     * @this {SweetAlert}\n     */\n    constructor(...args) {\n      /**\n       * @type {Promise<SweetAlertResult>}\n       */\n      _classPrivateFieldInitSpec(this, _promise, void 0);\n      // Prevent run in Node env\n      if (typeof window === 'undefined') {\n        return;\n      }\n      currentInstance = this;\n\n      // @ts-ignore\n      const outerParams = Object.freeze(this.constructor.argsToParams(args));\n\n      /** @type {Readonly<SweetAlertOptions>} */\n      this.params = outerParams;\n\n      /** @type {boolean} */\n      this.isAwaitingPromise = false;\n      _classPrivateFieldSet2(_promise, this, this._main(currentInstance.params));\n    }\n    _main(userParams, mixinParams = {}) {\n      showWarningsForParams(Object.assign({}, mixinParams, userParams));\n      if (globalState.currentInstance) {\n        const swalPromiseResolve = privateMethods.swalPromiseResolve.get(globalState.currentInstance);\n        const {\n          isAwaitingPromise\n        } = globalState.currentInstance;\n        globalState.currentInstance._destroy();\n        if (!isAwaitingPromise) {\n          swalPromiseResolve({\n            isDismissed: true\n          });\n        }\n        if (isModal()) {\n          unsetAriaHidden();\n        }\n      }\n      globalState.currentInstance = currentInstance;\n      const innerParams = prepareParams(userParams, mixinParams);\n      setParameters(innerParams);\n      Object.freeze(innerParams);\n\n      // clear the previous timer\n      if (globalState.timeout) {\n        globalState.timeout.stop();\n        delete globalState.timeout;\n      }\n\n      // clear the restore focus timeout\n      clearTimeout(globalState.restoreFocusTimeout);\n      const domCache = populateDomCache(currentInstance);\n      render(currentInstance, innerParams);\n      privateProps.innerParams.set(currentInstance, innerParams);\n      return swalPromise(currentInstance, domCache, innerParams);\n    }\n\n    // `catch` cannot be the name of a module export, so we define our thenable methods here instead\n    then(onFulfilled) {\n      return _classPrivateFieldGet2(_promise, this).then(onFulfilled);\n    }\n    finally(onFinally) {\n      return _classPrivateFieldGet2(_promise, this).finally(onFinally);\n    }\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {DomCache} domCache\n   * @param {SweetAlertOptions} innerParams\n   * @returns {Promise}\n   */\n  const swalPromise = (instance, domCache, innerParams) => {\n    return new Promise((resolve, reject) => {\n      // functions to handle all closings/dismissals\n      /**\n       * @param {DismissReason} dismiss\n       */\n      const dismissWith = dismiss => {\n        instance.close({\n          isDismissed: true,\n          dismiss\n        });\n      };\n      privateMethods.swalPromiseResolve.set(instance, resolve);\n      privateMethods.swalPromiseReject.set(instance, reject);\n      domCache.confirmButton.onclick = () => {\n        handleConfirmButtonClick(instance);\n      };\n      domCache.denyButton.onclick = () => {\n        handleDenyButtonClick(instance);\n      };\n      domCache.cancelButton.onclick = () => {\n        handleCancelButtonClick(instance, dismissWith);\n      };\n      domCache.closeButton.onclick = () => {\n        dismissWith(DismissReason.close);\n      };\n      handlePopupClick(innerParams, domCache, dismissWith);\n      addKeydownHandler(globalState, innerParams, dismissWith);\n      handleInputOptionsAndValue(instance, innerParams);\n      openPopup(innerParams);\n      setupTimer(globalState, innerParams, dismissWith);\n      initFocus(domCache, innerParams);\n\n      // Scroll container to top on open (#1247, #1946)\n      setTimeout(() => {\n        domCache.container.scrollTop = 0;\n      });\n    });\n  };\n\n  /**\n   * @param {SweetAlertOptions} userParams\n   * @param {SweetAlertOptions} mixinParams\n   * @returns {SweetAlertOptions}\n   */\n  const prepareParams = (userParams, mixinParams) => {\n    const templateParams = getTemplateParams(userParams);\n    const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131\n    params.showClass = Object.assign({}, defaultParams.showClass, params.showClass);\n    params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass);\n    if (params.animation === false) {\n      params.showClass = {\n        backdrop: 'swal2-noanimation'\n      };\n      params.hideClass = {};\n    }\n    return params;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @returns {DomCache}\n   */\n  const populateDomCache = instance => {\n    const domCache = {\n      popup: getPopup(),\n      container: getContainer(),\n      actions: getActions(),\n      confirmButton: getConfirmButton(),\n      denyButton: getDenyButton(),\n      cancelButton: getCancelButton(),\n      loader: getLoader(),\n      closeButton: getCloseButton(),\n      validationMessage: getValidationMessage(),\n      progressSteps: getProgressSteps()\n    };\n    privateProps.domCache.set(instance, domCache);\n    return domCache;\n  };\n\n  /**\n   * @param {GlobalState} globalState\n   * @param {SweetAlertOptions} innerParams\n   * @param {Function} dismissWith\n   */\n  const setupTimer = (globalState, innerParams, dismissWith) => {\n    const timerProgressBar = getTimerProgressBar();\n    hide(timerProgressBar);\n    if (innerParams.timer) {\n      globalState.timeout = new Timer(() => {\n        dismissWith('timer');\n        delete globalState.timeout;\n      }, innerParams.timer);\n      if (innerParams.timerProgressBar) {\n        show(timerProgressBar);\n        applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar');\n        setTimeout(() => {\n          if (globalState.timeout && globalState.timeout.running) {\n            // timer can be already stopped or unset at this point\n            animateTimerProgressBar(innerParams.timer);\n          }\n        });\n      }\n    }\n  };\n\n  /**\n   * Initialize focus in the popup:\n   *\n   * 1. If `toast` is `true`, don't steal focus from the document.\n   * 2. Else if there is an [autofocus] element, focus it.\n   * 3. Else if `focusConfirm` is `true` and confirm button is visible, focus it.\n   * 4. Else if `focusDeny` is `true` and deny button is visible, focus it.\n   * 5. Else if `focusCancel` is `true` and cancel button is visible, focus it.\n   * 6. Else focus the first focusable element in a popup (if any).\n   *\n   * @param {DomCache} domCache\n   * @param {SweetAlertOptions} innerParams\n   */\n  const initFocus = (domCache, innerParams) => {\n    if (innerParams.toast) {\n      return;\n    }\n    // TODO: this is dumb, remove `allowEnterKey` param in the next major version\n    if (!callIfFunction(innerParams.allowEnterKey)) {\n      warnAboutDeprecation('allowEnterKey');\n      blurActiveElement();\n      return;\n    }\n    if (focusAutofocus(domCache)) {\n      return;\n    }\n    if (focusButton(domCache, innerParams)) {\n      return;\n    }\n    setFocus(-1, 1);\n  };\n\n  /**\n   * @param {DomCache} domCache\n   * @returns {boolean}\n   */\n  const focusAutofocus = domCache => {\n    const autofocusElements = Array.from(domCache.popup.querySelectorAll('[autofocus]'));\n    for (const autofocusElement of autofocusElements) {\n      if (autofocusElement instanceof HTMLElement && isVisible$1(autofocusElement)) {\n        autofocusElement.focus();\n        return true;\n      }\n    }\n    return false;\n  };\n\n  /**\n   * @param {DomCache} domCache\n   * @param {SweetAlertOptions} innerParams\n   * @returns {boolean}\n   */\n  const focusButton = (domCache, innerParams) => {\n    if (innerParams.focusDeny && isVisible$1(domCache.denyButton)) {\n      domCache.denyButton.focus();\n      return true;\n    }\n    if (innerParams.focusCancel && isVisible$1(domCache.cancelButton)) {\n      domCache.cancelButton.focus();\n      return true;\n    }\n    if (innerParams.focusConfirm && isVisible$1(domCache.confirmButton)) {\n      domCache.confirmButton.focus();\n      return true;\n    }\n    return false;\n  };\n  const blurActiveElement = () => {\n    if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === 'function') {\n      document.activeElement.blur();\n    }\n  };\n\n  // Assign instance methods from src/instanceMethods/*.js to prototype\n  SweetAlert.prototype.disableButtons = disableButtons;\n  SweetAlert.prototype.enableButtons = enableButtons;\n  SweetAlert.prototype.getInput = getInput;\n  SweetAlert.prototype.disableInput = disableInput;\n  SweetAlert.prototype.enableInput = enableInput;\n  SweetAlert.prototype.hideLoading = hideLoading;\n  SweetAlert.prototype.disableLoading = hideLoading;\n  SweetAlert.prototype.showValidationMessage = showValidationMessage;\n  SweetAlert.prototype.resetValidationMessage = resetValidationMessage;\n  SweetAlert.prototype.close = close;\n  SweetAlert.prototype.closePopup = close;\n  SweetAlert.prototype.closeModal = close;\n  SweetAlert.prototype.closeToast = close;\n  SweetAlert.prototype.rejectPromise = rejectPromise;\n  SweetAlert.prototype.update = update;\n  SweetAlert.prototype._destroy = _destroy;\n\n  // Assign static methods from src/staticMethods/*.js to constructor\n  Object.assign(SweetAlert, staticMethods);\n\n  // Proxy to instance methods to constructor, for now, for backwards compatibility\n  Object.keys(instanceMethods).forEach(key => {\n    /**\n     * @param {...any} args\n     * @returns {any | undefined}\n     */\n    SweetAlert[key] = function (...args) {\n      if (currentInstance && currentInstance[key]) {\n        return currentInstance[key](...args);\n      }\n      return null;\n    };\n  });\n  SweetAlert.DismissReason = DismissReason;\n  SweetAlert.version = '11.23.0';\n\n  const Swal = SweetAlert;\n  // @ts-ignore\n  Swal.default = Swal;\n\n  return Swal;\n\n}));\nif (typeof this !== 'undefined' && this.Sweetalert2){this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2}\n\"undefined\"!=typeof document&&function(e,t){var n=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,\":root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.1s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px $swal2-outline-color;--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% / 0.075), 0 1px 2px hsl(0deg 0% 0% / 0.075), 1px 2px 4px hsl(0deg 0% 0% / 0.075), 1px 3px 8px hsl(0deg 0% 0% / 0.075), 2px 4px 16px hsl(0deg 0% 0% / 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\\\"top-start     top            top-end\\\" \\\"center-start  center         center-end\\\" \\\"bottom-start  bottom-center  bottom-end\\\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1/4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\\\"!\\\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1/4 !important;grid-row:1/4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}\");", "// node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs\nvar min = Math.min;\nvar max = Math.max;\nvar round = Math.round;\nvar floor = Math.floor;\nvar createCoords = (v) => ({\n  x: v,\n  y: v\n});\nvar oppositeSideMap = {\n  left: \"right\",\n  right: \"left\",\n  bottom: \"top\",\n  top: \"bottom\"\n};\nvar oppositeAlignmentMap = {\n  start: \"end\",\n  end: \"start\"\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === \"function\" ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split(\"-\")[0];\n}\nfunction getAlignment(placement) {\n  return placement.split(\"-\")[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === \"x\" ? \"y\" : \"x\";\n}\nfunction getAxisLength(axis) {\n  return axis === \"y\" ? \"height\" : \"width\";\n}\nfunction getSideAxis(placement) {\n  return [\"top\", \"bottom\"].includes(getSide(placement)) ? \"y\" : \"x\";\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === \"x\" ? alignment === (rtl ? \"end\" : \"start\") ? \"right\" : \"left\" : alignment === \"start\" ? \"bottom\" : \"top\";\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = [\"left\", \"right\"];\n  const rl = [\"right\", \"left\"];\n  const tb = [\"top\", \"bottom\"];\n  const bt = [\"bottom\", \"top\"];\n  switch (side) {\n    case \"top\":\n    case \"bottom\":\n      if (rtl)\n        return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case \"left\":\n    case \"right\":\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === \"start\", rtl);\n  if (alignment) {\n    list = list.map((side) => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, (side) => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== \"number\" ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  return {\n    ...rect,\n    top: rect.y,\n    left: rect.x,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  };\n}\n\n// node_modules/@floating-ui/core/dist/floating-ui.core.mjs\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === \"y\";\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case \"top\":\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case \"bottom\":\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case \"right\":\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case \"left\":\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case \"start\":\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case \"end\":\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\nvar computePosition = async (reference, floating, config) => {\n  const {\n    placement = \"bottom\",\n    strategy = \"absolute\",\n    middleware = [],\n    platform: platform2\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(floating));\n  let rects = await platform2.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform: platform2,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === \"object\") {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform2.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n      continue;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform: platform2,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = \"clippingAncestors\",\n    rootBoundary = \"viewport\",\n    elementContext = \"floating\",\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === \"floating\" ? \"reference\" : \"floating\";\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform2.getClippingRect({\n    element: ((_await$platform$isEle = await (platform2.isElement == null ? void 0 : platform2.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform2.getDocumentElement == null ? void 0 : platform2.getDocumentElement(elements.floating)),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === \"floating\" ? {\n    ...rects.floating,\n    x,\n    y\n  } : rects.reference;\n  const offsetParent = await (platform2.getOffsetParent == null ? void 0 : platform2.getOffsetParent(elements.floating));\n  const offsetScale = await (platform2.isElement == null ? void 0 : platform2.isElement(offsetParent)) ? await (platform2.getScale == null ? void 0 : platform2.getScale(offsetParent)) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform2.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform2.convertOffsetParentRelativeRectToViewportRelativeRect({\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\nvar flip = function(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: \"flip\",\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform: platform2,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = \"bestFit\",\n        fallbackAxisSideDirection = \"none\",\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== \"none\") {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements2 = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides2 = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides2[0]], overflow[sides2[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n      if (!overflows.every((side2) => side2 <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements2[nextIndex];\n        if (nextPlacement) {\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter((d) => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case \"bestFit\": {\n              var _overflowsData$map$so;\n              const placement2 = (_overflowsData$map$so = overflowsData.map((d) => [d.placement, d.overflows.filter((overflow2) => overflow2 > 0).reduce((acc, overflow2) => acc + overflow2, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n              if (placement2) {\n                resetPlacement = placement2;\n              }\n              break;\n            }\n            case \"initialPlacement\":\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform: platform2,\n    elements\n  } = state;\n  const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === \"y\";\n  const mainAxisMulti = [\"left\", \"top\"].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === \"number\" ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: 0,\n    crossAxis: 0,\n    alignmentAxis: null,\n    ...rawValue\n  };\n  if (alignment && typeof alignmentAxis === \"number\") {\n    crossAxis = alignment === \"end\" ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\nvar offset = function(options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: \"offset\",\n    options,\n    async fn(state) {\n      const {\n        x,\n        y\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: diffCoords\n      };\n    }\n  };\n};\nvar shift = function(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: \"shift\",\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: (_ref) => {\n            let {\n              x: x2,\n              y: y2\n            } = _ref;\n            return {\n              x: x2,\n              y: y2\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === \"y\" ? \"top\" : \"left\";\n        const maxSide = mainAxis === \"y\" ? \"bottom\" : \"right\";\n        const min2 = mainAxisCoord + overflow[minSide];\n        const max2 = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min2, mainAxisCoord, max2);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === \"y\" ? \"top\" : \"left\";\n        const maxSide = crossAxis === \"y\" ? \"bottom\" : \"right\";\n        const min2 = crossAxisCoord + overflow[minSide];\n        const max2 = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min2, crossAxisCoord, max2);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y\n        }\n      };\n    }\n  };\n};\n\n// node_modules/@floating-ui/utils/dom/dist/floating-ui.utils.dom.mjs\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || \"\").toLowerCase();\n  }\n  return \"#document\";\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null ? void 0 : (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (typeof ShadowRoot === \"undefined\") {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && ![\"inline\", \"contents\"].includes(display);\n}\nfunction isTableElement(element) {\n  return [\"table\", \"td\", \"th\"].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n  const webkit = isWebKit();\n  const css = getComputedStyle(element);\n  return css.transform !== \"none\" || css.perspective !== \"none\" || (css.containerType ? css.containerType !== \"normal\" : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== \"none\" : false) || !webkit && (css.filter ? css.filter !== \"none\" : false) || [\"transform\", \"perspective\", \"filter\"].some((value) => (css.willChange || \"\").includes(value)) || [\"paint\", \"layout\", \"strict\", \"content\"].some((value) => (css.contain || \"\").includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else {\n      currentNode = getParentNode(currentNode);\n    }\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === \"undefined\" || !CSS.supports)\n    return false;\n  return CSS.supports(\"-webkit-backdrop-filter\", \"none\");\n}\nfunction isLastTraversableNode(node) {\n  return [\"html\", \"body\", \"#document\"].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.pageXOffset,\n    scrollTop: element.pageYOffset\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === \"html\") {\n    return node;\n  }\n  const result = (\n    // Step into the shadow DOM of the parent of a slotted node.\n    node.assignedSlot || // DOM Element detected.\n    node.parentNode || // ShadowRoot detected.\n    isShadowRoot(node) && node.host || // Fallback.\n    getDocumentElement(node)\n  );\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\n\n// node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\nvar noOffsets = /* @__PURE__ */ createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentIFrame = win.frameElement;\n    while (currentIFrame && offsetParent && offsetWin !== win) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentIFrame = getWindow(currentIFrame).frameElement;\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  if (offsetParent === documentElement) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== \"fixed\") {\n    if (getNodeName(offsetParent) !== \"body\" || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\nfunction getWindowScrollBarX(element) {\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === \"rtl\") {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === \"fixed\") {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === \"fixed\");\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === \"viewport\") {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === \"document\") {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      ...clippingAncestor,\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === \"fixed\" || hasFixedPositionAncestor(parentNode, stopNode);\n}\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== \"body\");\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === \"fixed\";\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === \"fixed\") {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === \"static\" && !!currentContainingBlockComputedStyle && [\"absolute\", \"fixed\"].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      result = result.filter((ancestor) => ancestor !== currentNode);\n    } else {\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === \"clippingAncestors\" ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\nfunction getDimensions(element) {\n  return getCssDimensions(element);\n}\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === \"fixed\";\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== \"body\" || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === \"fixed\") {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  return element.offsetParent;\n}\nfunction getOffsetParent(element, polyfill) {\n  const window2 = getWindow(element);\n  if (!isHTMLElement(element)) {\n    return window2;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === \"static\") {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && (getNodeName(offsetParent) === \"html\" || getNodeName(offsetParent) === \"body\" && getComputedStyle(offsetParent).position === \"static\" && !isContainingBlock(offsetParent))) {\n    return window2;\n  }\n  return offsetParent || getContainingBlock(element) || window2;\n}\nvar getElementRects = async function(_ref) {\n  let {\n    reference,\n    floating,\n    strategy\n  } = _ref;\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  return {\n    reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      ...await getDimensionsFn(floating)\n    }\n  };\n};\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === \"rtl\";\n}\nvar platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    clearTimeout(timeoutId);\n    io && io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = element.getBoundingClientRect();\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 100);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === \"function\",\n    layoutShift = typeof IntersectionObserver === \"function\",\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach((ancestor) => {\n    ancestorScroll && ancestor.addEventListener(\"scroll\", update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener(\"resize\", update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver((_ref) => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          resizeObserver && resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    ancestors.forEach((ancestor) => {\n      ancestorScroll && ancestor.removeEventListener(\"scroll\", update);\n      ancestorResize && ancestor.removeEventListener(\"resize\", update);\n    });\n    cleanupIo && cleanupIo();\n    resizeObserver && resizeObserver.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\nvar computePosition2 = (reference, floating, options) => {\n  const cache = /* @__PURE__ */ new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\n// packages/anchor/src/index.js\nfunction src_default(Alpine) {\n  Alpine.magic(\"anchor\", (el) => {\n    if (!el._x_anchor)\n      throw \"Alpine: No x-anchor directive found on element using $anchor...\";\n    return el._x_anchor;\n  });\n  Alpine.interceptClone((from, to) => {\n    if (from && from._x_anchor && !to._x_anchor) {\n      to._x_anchor = from._x_anchor;\n    }\n  });\n  Alpine.directive(\"anchor\", Alpine.skipDuringClone(\n    (el, { expression, modifiers, value }, { cleanup, evaluate: evaluate2 }) => {\n      let { placement, offsetValue, unstyled } = getOptions(modifiers);\n      el._x_anchor = Alpine.reactive({ x: 0, y: 0 });\n      let reference = evaluate2(expression);\n      if (!reference)\n        throw \"Alpine: no element provided to x-anchor...\";\n      let compute = () => {\n        let previousValue;\n        computePosition2(reference, el, {\n          placement,\n          middleware: [flip(), shift({ padding: 5 }), offset(offsetValue)]\n        }).then(({ x, y }) => {\n          unstyled || setStyles(el, x, y);\n          if (JSON.stringify({ x, y }) !== previousValue) {\n            el._x_anchor.x = x;\n            el._x_anchor.y = y;\n          }\n          previousValue = JSON.stringify({ x, y });\n        });\n      };\n      let release = autoUpdate(reference, el, () => compute());\n      cleanup(() => release());\n    },\n    // When cloning (or \"morphing\"), we will graft the style and position data from the live tree...\n    (el, { expression, modifiers, value }, { cleanup, evaluate: evaluate2 }) => {\n      let { placement, offsetValue, unstyled } = getOptions(modifiers);\n      if (el._x_anchor) {\n        unstyled || setStyles(el, el._x_anchor.x, el._x_anchor.y);\n      }\n    }\n  ));\n}\nfunction setStyles(el, x, y) {\n  Object.assign(el.style, {\n    left: x + \"px\",\n    top: y + \"px\",\n    position: \"absolute\"\n  });\n}\nfunction getOptions(modifiers) {\n  let positions = [\"top\", \"top-start\", \"top-end\", \"right\", \"right-start\", \"right-end\", \"bottom\", \"bottom-start\", \"bottom-end\", \"left\", \"left-start\", \"left-end\"];\n  let placement = positions.find((i) => modifiers.includes(i));\n  let offsetValue = 0;\n  if (modifiers.includes(\"offset\")) {\n    let idx = modifiers.findIndex((i) => i === \"offset\");\n    offsetValue = modifiers[idx + 1] !== void 0 ? Number(modifiers[idx + 1]) : offsetValue;\n  }\n  let unstyled = modifiers.includes(\"no-style\");\n  return { placement, offsetValue, unstyled };\n}\n\n// packages/anchor/builds/module.js\nvar module_default = src_default;\nexport {\n  src_default as anchor,\n  module_default as default\n};\n", "// packages/alpinejs/src/scheduler.js\nvar flushPending = false;\nvar flushing = false;\nvar queue = [];\nvar lastFlushedIndex = -1;\nfunction scheduler(callback) {\n  queueJob(callback);\n}\nfunction queueJob(job) {\n  if (!queue.includes(job))\n    queue.push(job);\n  queueFlush();\n}\nfunction dequeueJob(job) {\n  let index = queue.indexOf(job);\n  if (index !== -1 && index > lastFlushedIndex)\n    queue.splice(index, 1);\n}\nfunction queueFlush() {\n  if (!flushing && !flushPending) {\n    flushPending = true;\n    queueMicrotask(flushJobs);\n  }\n}\nfunction flushJobs() {\n  flushPending = false;\n  flushing = true;\n  for (let i = 0; i < queue.length; i++) {\n    queue[i]();\n    lastFlushedIndex = i;\n  }\n  queue.length = 0;\n  lastFlushedIndex = -1;\n  flushing = false;\n}\n\n// packages/alpinejs/src/reactivity.js\nvar reactive;\nvar effect;\nvar release;\nvar raw;\nvar shouldSchedule = true;\nfunction disableEffectScheduling(callback) {\n  shouldSchedule = false;\n  callback();\n  shouldSchedule = true;\n}\nfunction setReactivityEngine(engine) {\n  reactive = engine.reactive;\n  release = engine.release;\n  effect = (callback) => engine.effect(callback, { scheduler: (task) => {\n    if (shouldSchedule) {\n      scheduler(task);\n    } else {\n      task();\n    }\n  } });\n  raw = engine.raw;\n}\nfunction overrideEffect(override) {\n  effect = override;\n}\nfunction elementBoundEffect(el) {\n  let cleanup2 = () => {\n  };\n  let wrappedEffect = (callback) => {\n    let effectReference = effect(callback);\n    if (!el._x_effects) {\n      el._x_effects = /* @__PURE__ */ new Set();\n      el._x_runEffects = () => {\n        el._x_effects.forEach((i) => i());\n      };\n    }\n    el._x_effects.add(effectReference);\n    cleanup2 = () => {\n      if (effectReference === void 0)\n        return;\n      el._x_effects.delete(effectReference);\n      release(effectReference);\n    };\n    return effectReference;\n  };\n  return [wrappedEffect, () => {\n    cleanup2();\n  }];\n}\nfunction watch(getter, callback) {\n  let firstTime = true;\n  let oldValue;\n  let effectReference = effect(() => {\n    let value = getter();\n    JSON.stringify(value);\n    if (!firstTime) {\n      queueMicrotask(() => {\n        callback(value, oldValue);\n        oldValue = value;\n      });\n    } else {\n      oldValue = value;\n    }\n    firstTime = false;\n  });\n  return () => release(effectReference);\n}\n\n// packages/alpinejs/src/mutation.js\nvar onAttributeAddeds = [];\nvar onElRemoveds = [];\nvar onElAddeds = [];\nfunction onElAdded(callback) {\n  onElAddeds.push(callback);\n}\nfunction onElRemoved(el, callback) {\n  if (typeof callback === \"function\") {\n    if (!el._x_cleanups)\n      el._x_cleanups = [];\n    el._x_cleanups.push(callback);\n  } else {\n    callback = el;\n    onElRemoveds.push(callback);\n  }\n}\nfunction onAttributesAdded(callback) {\n  onAttributeAddeds.push(callback);\n}\nfunction onAttributeRemoved(el, name, callback) {\n  if (!el._x_attributeCleanups)\n    el._x_attributeCleanups = {};\n  if (!el._x_attributeCleanups[name])\n    el._x_attributeCleanups[name] = [];\n  el._x_attributeCleanups[name].push(callback);\n}\nfunction cleanupAttributes(el, names) {\n  if (!el._x_attributeCleanups)\n    return;\n  Object.entries(el._x_attributeCleanups).forEach(([name, value]) => {\n    if (names === void 0 || names.includes(name)) {\n      value.forEach((i) => i());\n      delete el._x_attributeCleanups[name];\n    }\n  });\n}\nfunction cleanupElement(el) {\n  el._x_effects?.forEach(dequeueJob);\n  while (el._x_cleanups?.length)\n    el._x_cleanups.pop()();\n}\nvar observer = new MutationObserver(onMutate);\nvar currentlyObserving = false;\nfunction startObservingMutations() {\n  observer.observe(document, { subtree: true, childList: true, attributes: true, attributeOldValue: true });\n  currentlyObserving = true;\n}\nfunction stopObservingMutations() {\n  flushObserver();\n  observer.disconnect();\n  currentlyObserving = false;\n}\nvar queuedMutations = [];\nfunction flushObserver() {\n  let records = observer.takeRecords();\n  queuedMutations.push(() => records.length > 0 && onMutate(records));\n  let queueLengthWhenTriggered = queuedMutations.length;\n  queueMicrotask(() => {\n    if (queuedMutations.length === queueLengthWhenTriggered) {\n      while (queuedMutations.length > 0)\n        queuedMutations.shift()();\n    }\n  });\n}\nfunction mutateDom(callback) {\n  if (!currentlyObserving)\n    return callback();\n  stopObservingMutations();\n  let result = callback();\n  startObservingMutations();\n  return result;\n}\nvar isCollecting = false;\nvar deferredMutations = [];\nfunction deferMutations() {\n  isCollecting = true;\n}\nfunction flushAndStopDeferringMutations() {\n  isCollecting = false;\n  onMutate(deferredMutations);\n  deferredMutations = [];\n}\nfunction onMutate(mutations) {\n  if (isCollecting) {\n    deferredMutations = deferredMutations.concat(mutations);\n    return;\n  }\n  let addedNodes = [];\n  let removedNodes = /* @__PURE__ */ new Set();\n  let addedAttributes = /* @__PURE__ */ new Map();\n  let removedAttributes = /* @__PURE__ */ new Map();\n  for (let i = 0; i < mutations.length; i++) {\n    if (mutations[i].target._x_ignoreMutationObserver)\n      continue;\n    if (mutations[i].type === \"childList\") {\n      mutations[i].removedNodes.forEach((node) => {\n        if (node.nodeType !== 1)\n          return;\n        if (!node._x_marker)\n          return;\n        removedNodes.add(node);\n      });\n      mutations[i].addedNodes.forEach((node) => {\n        if (node.nodeType !== 1)\n          return;\n        if (removedNodes.has(node)) {\n          removedNodes.delete(node);\n          return;\n        }\n        if (node._x_marker)\n          return;\n        addedNodes.push(node);\n      });\n    }\n    if (mutations[i].type === \"attributes\") {\n      let el = mutations[i].target;\n      let name = mutations[i].attributeName;\n      let oldValue = mutations[i].oldValue;\n      let add2 = () => {\n        if (!addedAttributes.has(el))\n          addedAttributes.set(el, []);\n        addedAttributes.get(el).push({ name, value: el.getAttribute(name) });\n      };\n      let remove = () => {\n        if (!removedAttributes.has(el))\n          removedAttributes.set(el, []);\n        removedAttributes.get(el).push(name);\n      };\n      if (el.hasAttribute(name) && oldValue === null) {\n        add2();\n      } else if (el.hasAttribute(name)) {\n        remove();\n        add2();\n      } else {\n        remove();\n      }\n    }\n  }\n  removedAttributes.forEach((attrs, el) => {\n    cleanupAttributes(el, attrs);\n  });\n  addedAttributes.forEach((attrs, el) => {\n    onAttributeAddeds.forEach((i) => i(el, attrs));\n  });\n  for (let node of removedNodes) {\n    if (addedNodes.some((i) => i.contains(node)))\n      continue;\n    onElRemoveds.forEach((i) => i(node));\n  }\n  for (let node of addedNodes) {\n    if (!node.isConnected)\n      continue;\n    onElAddeds.forEach((i) => i(node));\n  }\n  addedNodes = null;\n  removedNodes = null;\n  addedAttributes = null;\n  removedAttributes = null;\n}\n\n// packages/alpinejs/src/scope.js\nfunction scope(node) {\n  return mergeProxies(closestDataStack(node));\n}\nfunction addScopeToNode(node, data2, referenceNode) {\n  node._x_dataStack = [data2, ...closestDataStack(referenceNode || node)];\n  return () => {\n    node._x_dataStack = node._x_dataStack.filter((i) => i !== data2);\n  };\n}\nfunction closestDataStack(node) {\n  if (node._x_dataStack)\n    return node._x_dataStack;\n  if (typeof ShadowRoot === \"function\" && node instanceof ShadowRoot) {\n    return closestDataStack(node.host);\n  }\n  if (!node.parentNode) {\n    return [];\n  }\n  return closestDataStack(node.parentNode);\n}\nfunction mergeProxies(objects) {\n  return new Proxy({ objects }, mergeProxyTrap);\n}\nvar mergeProxyTrap = {\n  ownKeys({ objects }) {\n    return Array.from(\n      new Set(objects.flatMap((i) => Object.keys(i)))\n    );\n  },\n  has({ objects }, name) {\n    if (name == Symbol.unscopables)\n      return false;\n    return objects.some(\n      (obj) => Object.prototype.hasOwnProperty.call(obj, name) || Reflect.has(obj, name)\n    );\n  },\n  get({ objects }, name, thisProxy) {\n    if (name == \"toJSON\")\n      return collapseProxies;\n    return Reflect.get(\n      objects.find(\n        (obj) => Reflect.has(obj, name)\n      ) || {},\n      name,\n      thisProxy\n    );\n  },\n  set({ objects }, name, value, thisProxy) {\n    const target = objects.find(\n      (obj) => Object.prototype.hasOwnProperty.call(obj, name)\n    ) || objects[objects.length - 1];\n    const descriptor = Object.getOwnPropertyDescriptor(target, name);\n    if (descriptor?.set && descriptor?.get)\n      return descriptor.set.call(thisProxy, value) || true;\n    return Reflect.set(target, name, value);\n  }\n};\nfunction collapseProxies() {\n  let keys = Reflect.ownKeys(this);\n  return keys.reduce((acc, key) => {\n    acc[key] = Reflect.get(this, key);\n    return acc;\n  }, {});\n}\n\n// packages/alpinejs/src/interceptor.js\nfunction initInterceptors(data2) {\n  let isObject2 = (val) => typeof val === \"object\" && !Array.isArray(val) && val !== null;\n  let recurse = (obj, basePath = \"\") => {\n    Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, { value, enumerable }]) => {\n      if (enumerable === false || value === void 0)\n        return;\n      if (typeof value === \"object\" && value !== null && value.__v_skip)\n        return;\n      let path = basePath === \"\" ? key : `${basePath}.${key}`;\n      if (typeof value === \"object\" && value !== null && value._x_interceptor) {\n        obj[key] = value.initialize(data2, path, key);\n      } else {\n        if (isObject2(value) && value !== obj && !(value instanceof Element)) {\n          recurse(value, path);\n        }\n      }\n    });\n  };\n  return recurse(data2);\n}\nfunction interceptor(callback, mutateObj = () => {\n}) {\n  let obj = {\n    initialValue: void 0,\n    _x_interceptor: true,\n    initialize(data2, path, key) {\n      return callback(this.initialValue, () => get(data2, path), (value) => set(data2, path, value), path, key);\n    }\n  };\n  mutateObj(obj);\n  return (initialValue) => {\n    if (typeof initialValue === \"object\" && initialValue !== null && initialValue._x_interceptor) {\n      let initialize = obj.initialize.bind(obj);\n      obj.initialize = (data2, path, key) => {\n        let innerValue = initialValue.initialize(data2, path, key);\n        obj.initialValue = innerValue;\n        return initialize(data2, path, key);\n      };\n    } else {\n      obj.initialValue = initialValue;\n    }\n    return obj;\n  };\n}\nfunction get(obj, path) {\n  return path.split(\".\").reduce((carry, segment) => carry[segment], obj);\n}\nfunction set(obj, path, value) {\n  if (typeof path === \"string\")\n    path = path.split(\".\");\n  if (path.length === 1)\n    obj[path[0]] = value;\n  else if (path.length === 0)\n    throw error;\n  else {\n    if (obj[path[0]])\n      return set(obj[path[0]], path.slice(1), value);\n    else {\n      obj[path[0]] = {};\n      return set(obj[path[0]], path.slice(1), value);\n    }\n  }\n}\n\n// packages/alpinejs/src/magics.js\nvar magics = {};\nfunction magic(name, callback) {\n  magics[name] = callback;\n}\nfunction injectMagics(obj, el) {\n  let memoizedUtilities = getUtilities(el);\n  Object.entries(magics).forEach(([name, callback]) => {\n    Object.defineProperty(obj, `$${name}`, {\n      get() {\n        return callback(el, memoizedUtilities);\n      },\n      enumerable: false\n    });\n  });\n  return obj;\n}\nfunction getUtilities(el) {\n  let [utilities, cleanup2] = getElementBoundUtilities(el);\n  let utils = { interceptor, ...utilities };\n  onElRemoved(el, cleanup2);\n  return utils;\n}\n\n// packages/alpinejs/src/utils/error.js\nfunction tryCatch(el, expression, callback, ...args) {\n  try {\n    return callback(...args);\n  } catch (e) {\n    handleError(e, el, expression);\n  }\n}\nfunction handleError(error2, el, expression = void 0) {\n  error2 = Object.assign(\n    error2 ?? { message: \"No error message given.\" },\n    { el, expression }\n  );\n  console.warn(`Alpine Expression Error: ${error2.message}\n\n${expression ? 'Expression: \"' + expression + '\"\\n\\n' : \"\"}`, el);\n  setTimeout(() => {\n    throw error2;\n  }, 0);\n}\n\n// packages/alpinejs/src/evaluator.js\nvar shouldAutoEvaluateFunctions = true;\nfunction dontAutoEvaluateFunctions(callback) {\n  let cache = shouldAutoEvaluateFunctions;\n  shouldAutoEvaluateFunctions = false;\n  let result = callback();\n  shouldAutoEvaluateFunctions = cache;\n  return result;\n}\nfunction evaluate(el, expression, extras = {}) {\n  let result;\n  evaluateLater(el, expression)((value) => result = value, extras);\n  return result;\n}\nfunction evaluateLater(...args) {\n  return theEvaluatorFunction(...args);\n}\nvar theEvaluatorFunction = normalEvaluator;\nfunction setEvaluator(newEvaluator) {\n  theEvaluatorFunction = newEvaluator;\n}\nfunction normalEvaluator(el, expression) {\n  let overriddenMagics = {};\n  injectMagics(overriddenMagics, el);\n  let dataStack = [overriddenMagics, ...closestDataStack(el)];\n  let evaluator = typeof expression === \"function\" ? generateEvaluatorFromFunction(dataStack, expression) : generateEvaluatorFromString(dataStack, expression, el);\n  return tryCatch.bind(null, el, expression, evaluator);\n}\nfunction generateEvaluatorFromFunction(dataStack, func) {\n  return (receiver = () => {\n  }, { scope: scope2 = {}, params = [], context } = {}) => {\n    let result = func.apply(mergeProxies([scope2, ...dataStack]), params);\n    runIfTypeOfFunction(receiver, result);\n  };\n}\nvar evaluatorMemo = {};\nfunction generateFunctionFromString(expression, el) {\n  if (evaluatorMemo[expression]) {\n    return evaluatorMemo[expression];\n  }\n  let AsyncFunction = Object.getPrototypeOf(async function() {\n  }).constructor;\n  let rightSideSafeExpression = /^[\\n\\s]*if.*\\(.*\\)/.test(expression.trim()) || /^(let|const)\\s/.test(expression.trim()) ? `(async()=>{ ${expression} })()` : expression;\n  const safeAsyncFunction = () => {\n    try {\n      let func2 = new AsyncFunction(\n        [\"__self\", \"scope\"],\n        `with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`\n      );\n      Object.defineProperty(func2, \"name\", {\n        value: `[Alpine] ${expression}`\n      });\n      return func2;\n    } catch (error2) {\n      handleError(error2, el, expression);\n      return Promise.resolve();\n    }\n  };\n  let func = safeAsyncFunction();\n  evaluatorMemo[expression] = func;\n  return func;\n}\nfunction generateEvaluatorFromString(dataStack, expression, el) {\n  let func = generateFunctionFromString(expression, el);\n  return (receiver = () => {\n  }, { scope: scope2 = {}, params = [], context } = {}) => {\n    func.result = void 0;\n    func.finished = false;\n    let completeScope = mergeProxies([scope2, ...dataStack]);\n    if (typeof func === \"function\") {\n      let promise = func.call(context, func, completeScope).catch((error2) => handleError(error2, el, expression));\n      if (func.finished) {\n        runIfTypeOfFunction(receiver, func.result, completeScope, params, el);\n        func.result = void 0;\n      } else {\n        promise.then((result) => {\n          runIfTypeOfFunction(receiver, result, completeScope, params, el);\n        }).catch((error2) => handleError(error2, el, expression)).finally(() => func.result = void 0);\n      }\n    }\n  };\n}\nfunction runIfTypeOfFunction(receiver, value, scope2, params, el) {\n  if (shouldAutoEvaluateFunctions && typeof value === \"function\") {\n    let result = value.apply(scope2, params);\n    if (result instanceof Promise) {\n      result.then((i) => runIfTypeOfFunction(receiver, i, scope2, params)).catch((error2) => handleError(error2, el, value));\n    } else {\n      receiver(result);\n    }\n  } else if (typeof value === \"object\" && value instanceof Promise) {\n    value.then((i) => receiver(i));\n  } else {\n    receiver(value);\n  }\n}\n\n// packages/alpinejs/src/directives.js\nvar prefixAsString = \"x-\";\nfunction prefix(subject = \"\") {\n  return prefixAsString + subject;\n}\nfunction setPrefix(newPrefix) {\n  prefixAsString = newPrefix;\n}\nvar directiveHandlers = {};\nfunction directive(name, callback) {\n  directiveHandlers[name] = callback;\n  return {\n    before(directive2) {\n      if (!directiveHandlers[directive2]) {\n        console.warn(String.raw`Cannot find directive \\`${directive2}\\`. \\`${name}\\` will use the default order of execution`);\n        return;\n      }\n      const pos = directiveOrder.indexOf(directive2);\n      directiveOrder.splice(pos >= 0 ? pos : directiveOrder.indexOf(\"DEFAULT\"), 0, name);\n    }\n  };\n}\nfunction directiveExists(name) {\n  return Object.keys(directiveHandlers).includes(name);\n}\nfunction directives(el, attributes, originalAttributeOverride) {\n  attributes = Array.from(attributes);\n  if (el._x_virtualDirectives) {\n    let vAttributes = Object.entries(el._x_virtualDirectives).map(([name, value]) => ({ name, value }));\n    let staticAttributes = attributesOnly(vAttributes);\n    vAttributes = vAttributes.map((attribute) => {\n      if (staticAttributes.find((attr) => attr.name === attribute.name)) {\n        return {\n          name: `x-bind:${attribute.name}`,\n          value: `\"${attribute.value}\"`\n        };\n      }\n      return attribute;\n    });\n    attributes = attributes.concat(vAttributes);\n  }\n  let transformedAttributeMap = {};\n  let directives2 = attributes.map(toTransformedAttributes((newName, oldName) => transformedAttributeMap[newName] = oldName)).filter(outNonAlpineAttributes).map(toParsedDirectives(transformedAttributeMap, originalAttributeOverride)).sort(byPriority);\n  return directives2.map((directive2) => {\n    return getDirectiveHandler(el, directive2);\n  });\n}\nfunction attributesOnly(attributes) {\n  return Array.from(attributes).map(toTransformedAttributes()).filter((attr) => !outNonAlpineAttributes(attr));\n}\nvar isDeferringHandlers = false;\nvar directiveHandlerStacks = /* @__PURE__ */ new Map();\nvar currentHandlerStackKey = Symbol();\nfunction deferHandlingDirectives(callback) {\n  isDeferringHandlers = true;\n  let key = Symbol();\n  currentHandlerStackKey = key;\n  directiveHandlerStacks.set(key, []);\n  let flushHandlers = () => {\n    while (directiveHandlerStacks.get(key).length)\n      directiveHandlerStacks.get(key).shift()();\n    directiveHandlerStacks.delete(key);\n  };\n  let stopDeferring = () => {\n    isDeferringHandlers = false;\n    flushHandlers();\n  };\n  callback(flushHandlers);\n  stopDeferring();\n}\nfunction getElementBoundUtilities(el) {\n  let cleanups = [];\n  let cleanup2 = (callback) => cleanups.push(callback);\n  let [effect3, cleanupEffect] = elementBoundEffect(el);\n  cleanups.push(cleanupEffect);\n  let utilities = {\n    Alpine: alpine_default,\n    effect: effect3,\n    cleanup: cleanup2,\n    evaluateLater: evaluateLater.bind(evaluateLater, el),\n    evaluate: evaluate.bind(evaluate, el)\n  };\n  let doCleanup = () => cleanups.forEach((i) => i());\n  return [utilities, doCleanup];\n}\nfunction getDirectiveHandler(el, directive2) {\n  let noop = () => {\n  };\n  let handler4 = directiveHandlers[directive2.type] || noop;\n  let [utilities, cleanup2] = getElementBoundUtilities(el);\n  onAttributeRemoved(el, directive2.original, cleanup2);\n  let fullHandler = () => {\n    if (el._x_ignore || el._x_ignoreSelf)\n      return;\n    handler4.inline && handler4.inline(el, directive2, utilities);\n    handler4 = handler4.bind(handler4, el, directive2, utilities);\n    isDeferringHandlers ? directiveHandlerStacks.get(currentHandlerStackKey).push(handler4) : handler4();\n  };\n  fullHandler.runCleanups = cleanup2;\n  return fullHandler;\n}\nvar startingWith = (subject, replacement) => ({ name, value }) => {\n  if (name.startsWith(subject))\n    name = name.replace(subject, replacement);\n  return { name, value };\n};\nvar into = (i) => i;\nfunction toTransformedAttributes(callback = () => {\n}) {\n  return ({ name, value }) => {\n    let { name: newName, value: newValue } = attributeTransformers.reduce((carry, transform) => {\n      return transform(carry);\n    }, { name, value });\n    if (newName !== name)\n      callback(newName, name);\n    return { name: newName, value: newValue };\n  };\n}\nvar attributeTransformers = [];\nfunction mapAttributes(callback) {\n  attributeTransformers.push(callback);\n}\nfunction outNonAlpineAttributes({ name }) {\n  return alpineAttributeRegex().test(name);\n}\nvar alpineAttributeRegex = () => new RegExp(`^${prefixAsString}([^:^.]+)\\\\b`);\nfunction toParsedDirectives(transformedAttributeMap, originalAttributeOverride) {\n  return ({ name, value }) => {\n    let typeMatch = name.match(alpineAttributeRegex());\n    let valueMatch = name.match(/:([a-zA-Z0-9\\-_:]+)/);\n    let modifiers = name.match(/\\.[^.\\]]+(?=[^\\]]*$)/g) || [];\n    let original = originalAttributeOverride || transformedAttributeMap[name] || name;\n    return {\n      type: typeMatch ? typeMatch[1] : null,\n      value: valueMatch ? valueMatch[1] : null,\n      modifiers: modifiers.map((i) => i.replace(\".\", \"\")),\n      expression: value,\n      original\n    };\n  };\n}\nvar DEFAULT = \"DEFAULT\";\nvar directiveOrder = [\n  \"ignore\",\n  \"ref\",\n  \"data\",\n  \"id\",\n  \"anchor\",\n  \"bind\",\n  \"init\",\n  \"for\",\n  \"model\",\n  \"modelable\",\n  \"transition\",\n  \"show\",\n  \"if\",\n  DEFAULT,\n  \"teleport\"\n];\nfunction byPriority(a, b) {\n  let typeA = directiveOrder.indexOf(a.type) === -1 ? DEFAULT : a.type;\n  let typeB = directiveOrder.indexOf(b.type) === -1 ? DEFAULT : b.type;\n  return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB);\n}\n\n// packages/alpinejs/src/utils/dispatch.js\nfunction dispatch(el, name, detail = {}) {\n  el.dispatchEvent(\n    new CustomEvent(name, {\n      detail,\n      bubbles: true,\n      // Allows events to pass the shadow DOM barrier.\n      composed: true,\n      cancelable: true\n    })\n  );\n}\n\n// packages/alpinejs/src/utils/walk.js\nfunction walk(el, callback) {\n  if (typeof ShadowRoot === \"function\" && el instanceof ShadowRoot) {\n    Array.from(el.children).forEach((el2) => walk(el2, callback));\n    return;\n  }\n  let skip = false;\n  callback(el, () => skip = true);\n  if (skip)\n    return;\n  let node = el.firstElementChild;\n  while (node) {\n    walk(node, callback, false);\n    node = node.nextElementSibling;\n  }\n}\n\n// packages/alpinejs/src/utils/warn.js\nfunction warn(message, ...args) {\n  console.warn(`Alpine Warning: ${message}`, ...args);\n}\n\n// packages/alpinejs/src/lifecycle.js\nvar started = false;\nfunction start() {\n  if (started)\n    warn(\"Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.\");\n  started = true;\n  if (!document.body)\n    warn(\"Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?\");\n  dispatch(document, \"alpine:init\");\n  dispatch(document, \"alpine:initializing\");\n  startObservingMutations();\n  onElAdded((el) => initTree(el, walk));\n  onElRemoved((el) => destroyTree(el));\n  onAttributesAdded((el, attrs) => {\n    directives(el, attrs).forEach((handle) => handle());\n  });\n  let outNestedComponents = (el) => !closestRoot(el.parentElement, true);\n  Array.from(document.querySelectorAll(allSelectors().join(\",\"))).filter(outNestedComponents).forEach((el) => {\n    initTree(el);\n  });\n  dispatch(document, \"alpine:initialized\");\n  setTimeout(() => {\n    warnAboutMissingPlugins();\n  });\n}\nvar rootSelectorCallbacks = [];\nvar initSelectorCallbacks = [];\nfunction rootSelectors() {\n  return rootSelectorCallbacks.map((fn) => fn());\n}\nfunction allSelectors() {\n  return rootSelectorCallbacks.concat(initSelectorCallbacks).map((fn) => fn());\n}\nfunction addRootSelector(selectorCallback) {\n  rootSelectorCallbacks.push(selectorCallback);\n}\nfunction addInitSelector(selectorCallback) {\n  initSelectorCallbacks.push(selectorCallback);\n}\nfunction closestRoot(el, includeInitSelectors = false) {\n  return findClosest(el, (element) => {\n    const selectors = includeInitSelectors ? allSelectors() : rootSelectors();\n    if (selectors.some((selector) => element.matches(selector)))\n      return true;\n  });\n}\nfunction findClosest(el, callback) {\n  if (!el)\n    return;\n  if (callback(el))\n    return el;\n  if (el._x_teleportBack)\n    el = el._x_teleportBack;\n  if (!el.parentElement)\n    return;\n  return findClosest(el.parentElement, callback);\n}\nfunction isRoot(el) {\n  return rootSelectors().some((selector) => el.matches(selector));\n}\nvar initInterceptors2 = [];\nfunction interceptInit(callback) {\n  initInterceptors2.push(callback);\n}\nvar markerDispenser = 1;\nfunction initTree(el, walker = walk, intercept = () => {\n}) {\n  if (findClosest(el, (i) => i._x_ignore))\n    return;\n  deferHandlingDirectives(() => {\n    walker(el, (el2, skip) => {\n      if (el2._x_marker)\n        return;\n      intercept(el2, skip);\n      initInterceptors2.forEach((i) => i(el2, skip));\n      directives(el2, el2.attributes).forEach((handle) => handle());\n      if (!el2._x_ignore)\n        el2._x_marker = markerDispenser++;\n      el2._x_ignore && skip();\n    });\n  });\n}\nfunction destroyTree(root, walker = walk) {\n  walker(root, (el) => {\n    cleanupElement(el);\n    cleanupAttributes(el);\n    delete el._x_marker;\n  });\n}\nfunction warnAboutMissingPlugins() {\n  let pluginDirectives = [\n    [\"ui\", \"dialog\", [\"[x-dialog], [x-popover]\"]],\n    [\"anchor\", \"anchor\", [\"[x-anchor]\"]],\n    [\"sort\", \"sort\", [\"[x-sort]\"]]\n  ];\n  pluginDirectives.forEach(([plugin2, directive2, selectors]) => {\n    if (directiveExists(directive2))\n      return;\n    selectors.some((selector) => {\n      if (document.querySelector(selector)) {\n        warn(`found \"${selector}\", but missing ${plugin2} plugin`);\n        return true;\n      }\n    });\n  });\n}\n\n// packages/alpinejs/src/nextTick.js\nvar tickStack = [];\nvar isHolding = false;\nfunction nextTick(callback = () => {\n}) {\n  queueMicrotask(() => {\n    isHolding || setTimeout(() => {\n      releaseNextTicks();\n    });\n  });\n  return new Promise((res) => {\n    tickStack.push(() => {\n      callback();\n      res();\n    });\n  });\n}\nfunction releaseNextTicks() {\n  isHolding = false;\n  while (tickStack.length)\n    tickStack.shift()();\n}\nfunction holdNextTicks() {\n  isHolding = true;\n}\n\n// packages/alpinejs/src/utils/classes.js\nfunction setClasses(el, value) {\n  if (Array.isArray(value)) {\n    return setClassesFromString(el, value.join(\" \"));\n  } else if (typeof value === \"object\" && value !== null) {\n    return setClassesFromObject(el, value);\n  } else if (typeof value === \"function\") {\n    return setClasses(el, value());\n  }\n  return setClassesFromString(el, value);\n}\nfunction setClassesFromString(el, classString) {\n  let split = (classString2) => classString2.split(\" \").filter(Boolean);\n  let missingClasses = (classString2) => classString2.split(\" \").filter((i) => !el.classList.contains(i)).filter(Boolean);\n  let addClassesAndReturnUndo = (classes) => {\n    el.classList.add(...classes);\n    return () => {\n      el.classList.remove(...classes);\n    };\n  };\n  classString = classString === true ? classString = \"\" : classString || \"\";\n  return addClassesAndReturnUndo(missingClasses(classString));\n}\nfunction setClassesFromObject(el, classObject) {\n  let split = (classString) => classString.split(\" \").filter(Boolean);\n  let forAdd = Object.entries(classObject).flatMap(([classString, bool]) => bool ? split(classString) : false).filter(Boolean);\n  let forRemove = Object.entries(classObject).flatMap(([classString, bool]) => !bool ? split(classString) : false).filter(Boolean);\n  let added = [];\n  let removed = [];\n  forRemove.forEach((i) => {\n    if (el.classList.contains(i)) {\n      el.classList.remove(i);\n      removed.push(i);\n    }\n  });\n  forAdd.forEach((i) => {\n    if (!el.classList.contains(i)) {\n      el.classList.add(i);\n      added.push(i);\n    }\n  });\n  return () => {\n    removed.forEach((i) => el.classList.add(i));\n    added.forEach((i) => el.classList.remove(i));\n  };\n}\n\n// packages/alpinejs/src/utils/styles.js\nfunction setStyles(el, value) {\n  if (typeof value === \"object\" && value !== null) {\n    return setStylesFromObject(el, value);\n  }\n  return setStylesFromString(el, value);\n}\nfunction setStylesFromObject(el, value) {\n  let previousStyles = {};\n  Object.entries(value).forEach(([key, value2]) => {\n    previousStyles[key] = el.style[key];\n    if (!key.startsWith(\"--\")) {\n      key = kebabCase(key);\n    }\n    el.style.setProperty(key, value2);\n  });\n  setTimeout(() => {\n    if (el.style.length === 0) {\n      el.removeAttribute(\"style\");\n    }\n  });\n  return () => {\n    setStyles(el, previousStyles);\n  };\n}\nfunction setStylesFromString(el, value) {\n  let cache = el.getAttribute(\"style\", value);\n  el.setAttribute(\"style\", value);\n  return () => {\n    el.setAttribute(\"style\", cache || \"\");\n  };\n}\nfunction kebabCase(subject) {\n  return subject.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\n// packages/alpinejs/src/utils/once.js\nfunction once(callback, fallback = () => {\n}) {\n  let called = false;\n  return function() {\n    if (!called) {\n      called = true;\n      callback.apply(this, arguments);\n    } else {\n      fallback.apply(this, arguments);\n    }\n  };\n}\n\n// packages/alpinejs/src/directives/x-transition.js\ndirective(\"transition\", (el, { value, modifiers, expression }, { evaluate: evaluate2 }) => {\n  if (typeof expression === \"function\")\n    expression = evaluate2(expression);\n  if (expression === false)\n    return;\n  if (!expression || typeof expression === \"boolean\") {\n    registerTransitionsFromHelper(el, modifiers, value);\n  } else {\n    registerTransitionsFromClassString(el, expression, value);\n  }\n});\nfunction registerTransitionsFromClassString(el, classString, stage) {\n  registerTransitionObject(el, setClasses, \"\");\n  let directiveStorageMap = {\n    \"enter\": (classes) => {\n      el._x_transition.enter.during = classes;\n    },\n    \"enter-start\": (classes) => {\n      el._x_transition.enter.start = classes;\n    },\n    \"enter-end\": (classes) => {\n      el._x_transition.enter.end = classes;\n    },\n    \"leave\": (classes) => {\n      el._x_transition.leave.during = classes;\n    },\n    \"leave-start\": (classes) => {\n      el._x_transition.leave.start = classes;\n    },\n    \"leave-end\": (classes) => {\n      el._x_transition.leave.end = classes;\n    }\n  };\n  directiveStorageMap[stage](classString);\n}\nfunction registerTransitionsFromHelper(el, modifiers, stage) {\n  registerTransitionObject(el, setStyles);\n  let doesntSpecify = !modifiers.includes(\"in\") && !modifiers.includes(\"out\") && !stage;\n  let transitioningIn = doesntSpecify || modifiers.includes(\"in\") || [\"enter\"].includes(stage);\n  let transitioningOut = doesntSpecify || modifiers.includes(\"out\") || [\"leave\"].includes(stage);\n  if (modifiers.includes(\"in\") && !doesntSpecify) {\n    modifiers = modifiers.filter((i, index) => index < modifiers.indexOf(\"out\"));\n  }\n  if (modifiers.includes(\"out\") && !doesntSpecify) {\n    modifiers = modifiers.filter((i, index) => index > modifiers.indexOf(\"out\"));\n  }\n  let wantsAll = !modifiers.includes(\"opacity\") && !modifiers.includes(\"scale\");\n  let wantsOpacity = wantsAll || modifiers.includes(\"opacity\");\n  let wantsScale = wantsAll || modifiers.includes(\"scale\");\n  let opacityValue = wantsOpacity ? 0 : 1;\n  let scaleValue = wantsScale ? modifierValue(modifiers, \"scale\", 95) / 100 : 1;\n  let delay = modifierValue(modifiers, \"delay\", 0) / 1e3;\n  let origin = modifierValue(modifiers, \"origin\", \"center\");\n  let property = \"opacity, transform\";\n  let durationIn = modifierValue(modifiers, \"duration\", 150) / 1e3;\n  let durationOut = modifierValue(modifiers, \"duration\", 75) / 1e3;\n  let easing = `cubic-bezier(0.4, 0.0, 0.2, 1)`;\n  if (transitioningIn) {\n    el._x_transition.enter.during = {\n      transformOrigin: origin,\n      transitionDelay: `${delay}s`,\n      transitionProperty: property,\n      transitionDuration: `${durationIn}s`,\n      transitionTimingFunction: easing\n    };\n    el._x_transition.enter.start = {\n      opacity: opacityValue,\n      transform: `scale(${scaleValue})`\n    };\n    el._x_transition.enter.end = {\n      opacity: 1,\n      transform: `scale(1)`\n    };\n  }\n  if (transitioningOut) {\n    el._x_transition.leave.during = {\n      transformOrigin: origin,\n      transitionDelay: `${delay}s`,\n      transitionProperty: property,\n      transitionDuration: `${durationOut}s`,\n      transitionTimingFunction: easing\n    };\n    el._x_transition.leave.start = {\n      opacity: 1,\n      transform: `scale(1)`\n    };\n    el._x_transition.leave.end = {\n      opacity: opacityValue,\n      transform: `scale(${scaleValue})`\n    };\n  }\n}\nfunction registerTransitionObject(el, setFunction, defaultValue = {}) {\n  if (!el._x_transition)\n    el._x_transition = {\n      enter: { during: defaultValue, start: defaultValue, end: defaultValue },\n      leave: { during: defaultValue, start: defaultValue, end: defaultValue },\n      in(before = () => {\n      }, after = () => {\n      }) {\n        transition(el, setFunction, {\n          during: this.enter.during,\n          start: this.enter.start,\n          end: this.enter.end\n        }, before, after);\n      },\n      out(before = () => {\n      }, after = () => {\n      }) {\n        transition(el, setFunction, {\n          during: this.leave.during,\n          start: this.leave.start,\n          end: this.leave.end\n        }, before, after);\n      }\n    };\n}\nwindow.Element.prototype._x_toggleAndCascadeWithTransitions = function(el, value, show, hide) {\n  const nextTick2 = document.visibilityState === \"visible\" ? requestAnimationFrame : setTimeout;\n  let clickAwayCompatibleShow = () => nextTick2(show);\n  if (value) {\n    if (el._x_transition && (el._x_transition.enter || el._x_transition.leave)) {\n      el._x_transition.enter && (Object.entries(el._x_transition.enter.during).length || Object.entries(el._x_transition.enter.start).length || Object.entries(el._x_transition.enter.end).length) ? el._x_transition.in(show) : clickAwayCompatibleShow();\n    } else {\n      el._x_transition ? el._x_transition.in(show) : clickAwayCompatibleShow();\n    }\n    return;\n  }\n  el._x_hidePromise = el._x_transition ? new Promise((resolve, reject) => {\n    el._x_transition.out(() => {\n    }, () => resolve(hide));\n    el._x_transitioning && el._x_transitioning.beforeCancel(() => reject({ isFromCancelledTransition: true }));\n  }) : Promise.resolve(hide);\n  queueMicrotask(() => {\n    let closest = closestHide(el);\n    if (closest) {\n      if (!closest._x_hideChildren)\n        closest._x_hideChildren = [];\n      closest._x_hideChildren.push(el);\n    } else {\n      nextTick2(() => {\n        let hideAfterChildren = (el2) => {\n          let carry = Promise.all([\n            el2._x_hidePromise,\n            ...(el2._x_hideChildren || []).map(hideAfterChildren)\n          ]).then(([i]) => i?.());\n          delete el2._x_hidePromise;\n          delete el2._x_hideChildren;\n          return carry;\n        };\n        hideAfterChildren(el).catch((e) => {\n          if (!e.isFromCancelledTransition)\n            throw e;\n        });\n      });\n    }\n  });\n};\nfunction closestHide(el) {\n  let parent = el.parentNode;\n  if (!parent)\n    return;\n  return parent._x_hidePromise ? parent : closestHide(parent);\n}\nfunction transition(el, setFunction, { during, start: start2, end } = {}, before = () => {\n}, after = () => {\n}) {\n  if (el._x_transitioning)\n    el._x_transitioning.cancel();\n  if (Object.keys(during).length === 0 && Object.keys(start2).length === 0 && Object.keys(end).length === 0) {\n    before();\n    after();\n    return;\n  }\n  let undoStart, undoDuring, undoEnd;\n  performTransition(el, {\n    start() {\n      undoStart = setFunction(el, start2);\n    },\n    during() {\n      undoDuring = setFunction(el, during);\n    },\n    before,\n    end() {\n      undoStart();\n      undoEnd = setFunction(el, end);\n    },\n    after,\n    cleanup() {\n      undoDuring();\n      undoEnd();\n    }\n  });\n}\nfunction performTransition(el, stages) {\n  let interrupted, reachedBefore, reachedEnd;\n  let finish = once(() => {\n    mutateDom(() => {\n      interrupted = true;\n      if (!reachedBefore)\n        stages.before();\n      if (!reachedEnd) {\n        stages.end();\n        releaseNextTicks();\n      }\n      stages.after();\n      if (el.isConnected)\n        stages.cleanup();\n      delete el._x_transitioning;\n    });\n  });\n  el._x_transitioning = {\n    beforeCancels: [],\n    beforeCancel(callback) {\n      this.beforeCancels.push(callback);\n    },\n    cancel: once(function() {\n      while (this.beforeCancels.length) {\n        this.beforeCancels.shift()();\n      }\n      ;\n      finish();\n    }),\n    finish\n  };\n  mutateDom(() => {\n    stages.start();\n    stages.during();\n  });\n  holdNextTicks();\n  requestAnimationFrame(() => {\n    if (interrupted)\n      return;\n    let duration = Number(getComputedStyle(el).transitionDuration.replace(/,.*/, \"\").replace(\"s\", \"\")) * 1e3;\n    let delay = Number(getComputedStyle(el).transitionDelay.replace(/,.*/, \"\").replace(\"s\", \"\")) * 1e3;\n    if (duration === 0)\n      duration = Number(getComputedStyle(el).animationDuration.replace(\"s\", \"\")) * 1e3;\n    mutateDom(() => {\n      stages.before();\n    });\n    reachedBefore = true;\n    requestAnimationFrame(() => {\n      if (interrupted)\n        return;\n      mutateDom(() => {\n        stages.end();\n      });\n      releaseNextTicks();\n      setTimeout(el._x_transitioning.finish, duration + delay);\n      reachedEnd = true;\n    });\n  });\n}\nfunction modifierValue(modifiers, key, fallback) {\n  if (modifiers.indexOf(key) === -1)\n    return fallback;\n  const rawValue = modifiers[modifiers.indexOf(key) + 1];\n  if (!rawValue)\n    return fallback;\n  if (key === \"scale\") {\n    if (isNaN(rawValue))\n      return fallback;\n  }\n  if (key === \"duration\" || key === \"delay\") {\n    let match = rawValue.match(/([0-9]+)ms/);\n    if (match)\n      return match[1];\n  }\n  if (key === \"origin\") {\n    if ([\"top\", \"right\", \"left\", \"center\", \"bottom\"].includes(modifiers[modifiers.indexOf(key) + 2])) {\n      return [rawValue, modifiers[modifiers.indexOf(key) + 2]].join(\" \");\n    }\n  }\n  return rawValue;\n}\n\n// packages/alpinejs/src/clone.js\nvar isCloning = false;\nfunction skipDuringClone(callback, fallback = () => {\n}) {\n  return (...args) => isCloning ? fallback(...args) : callback(...args);\n}\nfunction onlyDuringClone(callback) {\n  return (...args) => isCloning && callback(...args);\n}\nvar interceptors = [];\nfunction interceptClone(callback) {\n  interceptors.push(callback);\n}\nfunction cloneNode(from, to) {\n  interceptors.forEach((i) => i(from, to));\n  isCloning = true;\n  dontRegisterReactiveSideEffects(() => {\n    initTree(to, (el, callback) => {\n      callback(el, () => {\n      });\n    });\n  });\n  isCloning = false;\n}\nvar isCloningLegacy = false;\nfunction clone(oldEl, newEl) {\n  if (!newEl._x_dataStack)\n    newEl._x_dataStack = oldEl._x_dataStack;\n  isCloning = true;\n  isCloningLegacy = true;\n  dontRegisterReactiveSideEffects(() => {\n    cloneTree(newEl);\n  });\n  isCloning = false;\n  isCloningLegacy = false;\n}\nfunction cloneTree(el) {\n  let hasRunThroughFirstEl = false;\n  let shallowWalker = (el2, callback) => {\n    walk(el2, (el3, skip) => {\n      if (hasRunThroughFirstEl && isRoot(el3))\n        return skip();\n      hasRunThroughFirstEl = true;\n      callback(el3, skip);\n    });\n  };\n  initTree(el, shallowWalker);\n}\nfunction dontRegisterReactiveSideEffects(callback) {\n  let cache = effect;\n  overrideEffect((callback2, el) => {\n    let storedEffect = cache(callback2);\n    release(storedEffect);\n    return () => {\n    };\n  });\n  callback();\n  overrideEffect(cache);\n}\n\n// packages/alpinejs/src/utils/bind.js\nfunction bind(el, name, value, modifiers = []) {\n  if (!el._x_bindings)\n    el._x_bindings = reactive({});\n  el._x_bindings[name] = value;\n  name = modifiers.includes(\"camel\") ? camelCase(name) : name;\n  switch (name) {\n    case \"value\":\n      bindInputValue(el, value);\n      break;\n    case \"style\":\n      bindStyles(el, value);\n      break;\n    case \"class\":\n      bindClasses(el, value);\n      break;\n    case \"selected\":\n    case \"checked\":\n      bindAttributeAndProperty(el, name, value);\n      break;\n    default:\n      bindAttribute(el, name, value);\n      break;\n  }\n}\nfunction bindInputValue(el, value) {\n  if (isRadio(el)) {\n    if (el.attributes.value === void 0) {\n      el.value = value;\n    }\n    if (window.fromModel) {\n      if (typeof value === \"boolean\") {\n        el.checked = safeParseBoolean(el.value) === value;\n      } else {\n        el.checked = checkedAttrLooseCompare(el.value, value);\n      }\n    }\n  } else if (isCheckbox(el)) {\n    if (Number.isInteger(value)) {\n      el.value = value;\n    } else if (!Array.isArray(value) && typeof value !== \"boolean\" && ![null, void 0].includes(value)) {\n      el.value = String(value);\n    } else {\n      if (Array.isArray(value)) {\n        el.checked = value.some((val) => checkedAttrLooseCompare(val, el.value));\n      } else {\n        el.checked = !!value;\n      }\n    }\n  } else if (el.tagName === \"SELECT\") {\n    updateSelect(el, value);\n  } else {\n    if (el.value === value)\n      return;\n    el.value = value === void 0 ? \"\" : value;\n  }\n}\nfunction bindClasses(el, value) {\n  if (el._x_undoAddedClasses)\n    el._x_undoAddedClasses();\n  el._x_undoAddedClasses = setClasses(el, value);\n}\nfunction bindStyles(el, value) {\n  if (el._x_undoAddedStyles)\n    el._x_undoAddedStyles();\n  el._x_undoAddedStyles = setStyles(el, value);\n}\nfunction bindAttributeAndProperty(el, name, value) {\n  bindAttribute(el, name, value);\n  setPropertyIfChanged(el, name, value);\n}\nfunction bindAttribute(el, name, value) {\n  if ([null, void 0, false].includes(value) && attributeShouldntBePreservedIfFalsy(name)) {\n    el.removeAttribute(name);\n  } else {\n    if (isBooleanAttr(name))\n      value = name;\n    setIfChanged(el, name, value);\n  }\n}\nfunction setIfChanged(el, attrName, value) {\n  if (el.getAttribute(attrName) != value) {\n    el.setAttribute(attrName, value);\n  }\n}\nfunction setPropertyIfChanged(el, propName, value) {\n  if (el[propName] !== value) {\n    el[propName] = value;\n  }\n}\nfunction updateSelect(el, value) {\n  const arrayWrappedValue = [].concat(value).map((value2) => {\n    return value2 + \"\";\n  });\n  Array.from(el.options).forEach((option) => {\n    option.selected = arrayWrappedValue.includes(option.value);\n  });\n}\nfunction camelCase(subject) {\n  return subject.toLowerCase().replace(/-(\\w)/g, (match, char) => char.toUpperCase());\n}\nfunction checkedAttrLooseCompare(valueA, valueB) {\n  return valueA == valueB;\n}\nfunction safeParseBoolean(rawValue) {\n  if ([1, \"1\", \"true\", \"on\", \"yes\", true].includes(rawValue)) {\n    return true;\n  }\n  if ([0, \"0\", \"false\", \"off\", \"no\", false].includes(rawValue)) {\n    return false;\n  }\n  return rawValue ? Boolean(rawValue) : null;\n}\nvar booleanAttributes = /* @__PURE__ */ new Set([\n  \"allowfullscreen\",\n  \"async\",\n  \"autofocus\",\n  \"autoplay\",\n  \"checked\",\n  \"controls\",\n  \"default\",\n  \"defer\",\n  \"disabled\",\n  \"formnovalidate\",\n  \"inert\",\n  \"ismap\",\n  \"itemscope\",\n  \"loop\",\n  \"multiple\",\n  \"muted\",\n  \"nomodule\",\n  \"novalidate\",\n  \"open\",\n  \"playsinline\",\n  \"readonly\",\n  \"required\",\n  \"reversed\",\n  \"selected\",\n  \"shadowrootclonable\",\n  \"shadowrootdelegatesfocus\",\n  \"shadowrootserializable\"\n]);\nfunction isBooleanAttr(attrName) {\n  return booleanAttributes.has(attrName);\n}\nfunction attributeShouldntBePreservedIfFalsy(name) {\n  return ![\"aria-pressed\", \"aria-checked\", \"aria-expanded\", \"aria-selected\"].includes(name);\n}\nfunction getBinding(el, name, fallback) {\n  if (el._x_bindings && el._x_bindings[name] !== void 0)\n    return el._x_bindings[name];\n  return getAttributeBinding(el, name, fallback);\n}\nfunction extractProp(el, name, fallback, extract = true) {\n  if (el._x_bindings && el._x_bindings[name] !== void 0)\n    return el._x_bindings[name];\n  if (el._x_inlineBindings && el._x_inlineBindings[name] !== void 0) {\n    let binding = el._x_inlineBindings[name];\n    binding.extract = extract;\n    return dontAutoEvaluateFunctions(() => {\n      return evaluate(el, binding.expression);\n    });\n  }\n  return getAttributeBinding(el, name, fallback);\n}\nfunction getAttributeBinding(el, name, fallback) {\n  let attr = el.getAttribute(name);\n  if (attr === null)\n    return typeof fallback === \"function\" ? fallback() : fallback;\n  if (attr === \"\")\n    return true;\n  if (isBooleanAttr(name)) {\n    return !![name, \"true\"].includes(attr);\n  }\n  return attr;\n}\nfunction isCheckbox(el) {\n  return el.type === \"checkbox\" || el.localName === \"ui-checkbox\" || el.localName === \"ui-switch\";\n}\nfunction isRadio(el) {\n  return el.type === \"radio\" || el.localName === \"ui-radio\";\n}\n\n// packages/alpinejs/src/utils/debounce.js\nfunction debounce(func, wait) {\n  let timeout;\n  return function() {\n    const context = this, args = arguments;\n    const later = function() {\n      timeout = null;\n      func.apply(context, args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n}\n\n// packages/alpinejs/src/utils/throttle.js\nfunction throttle(func, limit) {\n  let inThrottle;\n  return function() {\n    let context = this, args = arguments;\n    if (!inThrottle) {\n      func.apply(context, args);\n      inThrottle = true;\n      setTimeout(() => inThrottle = false, limit);\n    }\n  };\n}\n\n// packages/alpinejs/src/entangle.js\nfunction entangle({ get: outerGet, set: outerSet }, { get: innerGet, set: innerSet }) {\n  let firstRun = true;\n  let outerHash;\n  let innerHash;\n  let reference = effect(() => {\n    let outer = outerGet();\n    let inner = innerGet();\n    if (firstRun) {\n      innerSet(cloneIfObject(outer));\n      firstRun = false;\n    } else {\n      let outerHashLatest = JSON.stringify(outer);\n      let innerHashLatest = JSON.stringify(inner);\n      if (outerHashLatest !== outerHash) {\n        innerSet(cloneIfObject(outer));\n      } else if (outerHashLatest !== innerHashLatest) {\n        outerSet(cloneIfObject(inner));\n      } else {\n      }\n    }\n    outerHash = JSON.stringify(outerGet());\n    innerHash = JSON.stringify(innerGet());\n  });\n  return () => {\n    release(reference);\n  };\n}\nfunction cloneIfObject(value) {\n  return typeof value === \"object\" ? JSON.parse(JSON.stringify(value)) : value;\n}\n\n// packages/alpinejs/src/plugin.js\nfunction plugin(callback) {\n  let callbacks = Array.isArray(callback) ? callback : [callback];\n  callbacks.forEach((i) => i(alpine_default));\n}\n\n// packages/alpinejs/src/store.js\nvar stores = {};\nvar isReactive = false;\nfunction store(name, value) {\n  if (!isReactive) {\n    stores = reactive(stores);\n    isReactive = true;\n  }\n  if (value === void 0) {\n    return stores[name];\n  }\n  stores[name] = value;\n  initInterceptors(stores[name]);\n  if (typeof value === \"object\" && value !== null && value.hasOwnProperty(\"init\") && typeof value.init === \"function\") {\n    stores[name].init();\n  }\n}\nfunction getStores() {\n  return stores;\n}\n\n// packages/alpinejs/src/binds.js\nvar binds = {};\nfunction bind2(name, bindings) {\n  let getBindings = typeof bindings !== \"function\" ? () => bindings : bindings;\n  if (name instanceof Element) {\n    return applyBindingsObject(name, getBindings());\n  } else {\n    binds[name] = getBindings;\n  }\n  return () => {\n  };\n}\nfunction injectBindingProviders(obj) {\n  Object.entries(binds).forEach(([name, callback]) => {\n    Object.defineProperty(obj, name, {\n      get() {\n        return (...args) => {\n          return callback(...args);\n        };\n      }\n    });\n  });\n  return obj;\n}\nfunction applyBindingsObject(el, obj, original) {\n  let cleanupRunners = [];\n  while (cleanupRunners.length)\n    cleanupRunners.pop()();\n  let attributes = Object.entries(obj).map(([name, value]) => ({ name, value }));\n  let staticAttributes = attributesOnly(attributes);\n  attributes = attributes.map((attribute) => {\n    if (staticAttributes.find((attr) => attr.name === attribute.name)) {\n      return {\n        name: `x-bind:${attribute.name}`,\n        value: `\"${attribute.value}\"`\n      };\n    }\n    return attribute;\n  });\n  directives(el, attributes, original).map((handle) => {\n    cleanupRunners.push(handle.runCleanups);\n    handle();\n  });\n  return () => {\n    while (cleanupRunners.length)\n      cleanupRunners.pop()();\n  };\n}\n\n// packages/alpinejs/src/datas.js\nvar datas = {};\nfunction data(name, callback) {\n  datas[name] = callback;\n}\nfunction injectDataProviders(obj, context) {\n  Object.entries(datas).forEach(([name, callback]) => {\n    Object.defineProperty(obj, name, {\n      get() {\n        return (...args) => {\n          return callback.bind(context)(...args);\n        };\n      },\n      enumerable: false\n    });\n  });\n  return obj;\n}\n\n// packages/alpinejs/src/alpine.js\nvar Alpine = {\n  get reactive() {\n    return reactive;\n  },\n  get release() {\n    return release;\n  },\n  get effect() {\n    return effect;\n  },\n  get raw() {\n    return raw;\n  },\n  version: \"3.15.0\",\n  flushAndStopDeferringMutations,\n  dontAutoEvaluateFunctions,\n  disableEffectScheduling,\n  startObservingMutations,\n  stopObservingMutations,\n  setReactivityEngine,\n  onAttributeRemoved,\n  onAttributesAdded,\n  closestDataStack,\n  skipDuringClone,\n  onlyDuringClone,\n  addRootSelector,\n  addInitSelector,\n  interceptClone,\n  addScopeToNode,\n  deferMutations,\n  mapAttributes,\n  evaluateLater,\n  interceptInit,\n  setEvaluator,\n  mergeProxies,\n  extractProp,\n  findClosest,\n  onElRemoved,\n  closestRoot,\n  destroyTree,\n  interceptor,\n  // INTERNAL: not public API and is subject to change without major release.\n  transition,\n  // INTERNAL\n  setStyles,\n  // INTERNAL\n  mutateDom,\n  directive,\n  entangle,\n  throttle,\n  debounce,\n  evaluate,\n  initTree,\n  nextTick,\n  prefixed: prefix,\n  prefix: setPrefix,\n  plugin,\n  magic,\n  store,\n  start,\n  clone,\n  // INTERNAL\n  cloneNode,\n  // INTERNAL\n  bound: getBinding,\n  $data: scope,\n  watch,\n  walk,\n  data,\n  bind: bind2\n};\nvar alpine_default = Alpine;\n\n// node_modules/@vue/shared/dist/shared.esm-bundler.js\nfunction makeMap(str, expectsLowerCase) {\n  const map = /* @__PURE__ */ Object.create(null);\n  const list = str.split(\",\");\n  for (let i = 0; i < list.length; i++) {\n    map[list[i]] = true;\n  }\n  return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];\n}\nvar specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nvar isBooleanAttr2 = /* @__PURE__ */ makeMap(specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`);\nvar EMPTY_OBJ = true ? Object.freeze({}) : {};\nvar EMPTY_ARR = true ? Object.freeze([]) : [];\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar hasOwn = (val, key) => hasOwnProperty.call(val, key);\nvar isArray = Array.isArray;\nvar isMap = (val) => toTypeString(val) === \"[object Map]\";\nvar isString = (val) => typeof val === \"string\";\nvar isSymbol = (val) => typeof val === \"symbol\";\nvar isObject = (val) => val !== null && typeof val === \"object\";\nvar objectToString = Object.prototype.toString;\nvar toTypeString = (value) => objectToString.call(value);\nvar toRawType = (value) => {\n  return toTypeString(value).slice(8, -1);\n};\nvar isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nvar cacheStringFunction = (fn) => {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n};\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cacheStringFunction((str) => {\n  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nvar capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\nvar toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\nvar hasChanged = (value, oldValue) => value !== oldValue && (value === value || oldValue === oldValue);\n\n// node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js\nvar targetMap = /* @__PURE__ */ new WeakMap();\nvar effectStack = [];\nvar activeEffect;\nvar ITERATE_KEY = Symbol(true ? \"iterate\" : \"\");\nvar MAP_KEY_ITERATE_KEY = Symbol(true ? \"Map key iterate\" : \"\");\nfunction isEffect(fn) {\n  return fn && fn._isEffect === true;\n}\nfunction effect2(fn, options = EMPTY_OBJ) {\n  if (isEffect(fn)) {\n    fn = fn.raw;\n  }\n  const effect3 = createReactiveEffect(fn, options);\n  if (!options.lazy) {\n    effect3();\n  }\n  return effect3;\n}\nfunction stop(effect3) {\n  if (effect3.active) {\n    cleanup(effect3);\n    if (effect3.options.onStop) {\n      effect3.options.onStop();\n    }\n    effect3.active = false;\n  }\n}\nvar uid = 0;\nfunction createReactiveEffect(fn, options) {\n  const effect3 = function reactiveEffect() {\n    if (!effect3.active) {\n      return fn();\n    }\n    if (!effectStack.includes(effect3)) {\n      cleanup(effect3);\n      try {\n        enableTracking();\n        effectStack.push(effect3);\n        activeEffect = effect3;\n        return fn();\n      } finally {\n        effectStack.pop();\n        resetTracking();\n        activeEffect = effectStack[effectStack.length - 1];\n      }\n    }\n  };\n  effect3.id = uid++;\n  effect3.allowRecurse = !!options.allowRecurse;\n  effect3._isEffect = true;\n  effect3.active = true;\n  effect3.raw = fn;\n  effect3.deps = [];\n  effect3.options = options;\n  return effect3;\n}\nfunction cleanup(effect3) {\n  const { deps } = effect3;\n  if (deps.length) {\n    for (let i = 0; i < deps.length; i++) {\n      deps[i].delete(effect3);\n    }\n    deps.length = 0;\n  }\n}\nvar shouldTrack = true;\nvar trackStack = [];\nfunction pauseTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = false;\n}\nfunction enableTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = true;\n}\nfunction resetTracking() {\n  const last = trackStack.pop();\n  shouldTrack = last === void 0 ? true : last;\n}\nfunction track(target, type, key) {\n  if (!shouldTrack || activeEffect === void 0) {\n    return;\n  }\n  let depsMap = targetMap.get(target);\n  if (!depsMap) {\n    targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n  }\n  let dep = depsMap.get(key);\n  if (!dep) {\n    depsMap.set(key, dep = /* @__PURE__ */ new Set());\n  }\n  if (!dep.has(activeEffect)) {\n    dep.add(activeEffect);\n    activeEffect.deps.push(dep);\n    if (activeEffect.options.onTrack) {\n      activeEffect.options.onTrack({\n        effect: activeEffect,\n        target,\n        type,\n        key\n      });\n    }\n  }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n  const depsMap = targetMap.get(target);\n  if (!depsMap) {\n    return;\n  }\n  const effects = /* @__PURE__ */ new Set();\n  const add2 = (effectsToAdd) => {\n    if (effectsToAdd) {\n      effectsToAdd.forEach((effect3) => {\n        if (effect3 !== activeEffect || effect3.allowRecurse) {\n          effects.add(effect3);\n        }\n      });\n    }\n  };\n  if (type === \"clear\") {\n    depsMap.forEach(add2);\n  } else if (key === \"length\" && isArray(target)) {\n    depsMap.forEach((dep, key2) => {\n      if (key2 === \"length\" || key2 >= newValue) {\n        add2(dep);\n      }\n    });\n  } else {\n    if (key !== void 0) {\n      add2(depsMap.get(key));\n    }\n    switch (type) {\n      case \"add\":\n        if (!isArray(target)) {\n          add2(depsMap.get(ITERATE_KEY));\n          if (isMap(target)) {\n            add2(depsMap.get(MAP_KEY_ITERATE_KEY));\n          }\n        } else if (isIntegerKey(key)) {\n          add2(depsMap.get(\"length\"));\n        }\n        break;\n      case \"delete\":\n        if (!isArray(target)) {\n          add2(depsMap.get(ITERATE_KEY));\n          if (isMap(target)) {\n            add2(depsMap.get(MAP_KEY_ITERATE_KEY));\n          }\n        }\n        break;\n      case \"set\":\n        if (isMap(target)) {\n          add2(depsMap.get(ITERATE_KEY));\n        }\n        break;\n    }\n  }\n  const run = (effect3) => {\n    if (effect3.options.onTrigger) {\n      effect3.options.onTrigger({\n        effect: effect3,\n        target,\n        key,\n        type,\n        newValue,\n        oldValue,\n        oldTarget\n      });\n    }\n    if (effect3.options.scheduler) {\n      effect3.options.scheduler(effect3);\n    } else {\n      effect3();\n    }\n  };\n  effects.forEach(run);\n}\nvar isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nvar builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol).map((key) => Symbol[key]).filter(isSymbol));\nvar get2 = /* @__PURE__ */ createGetter();\nvar readonlyGet = /* @__PURE__ */ createGetter(true);\nvar arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n  const instrumentations = {};\n  [\"includes\", \"indexOf\", \"lastIndexOf\"].forEach((key) => {\n    instrumentations[key] = function(...args) {\n      const arr = toRaw(this);\n      for (let i = 0, l = this.length; i < l; i++) {\n        track(arr, \"get\", i + \"\");\n      }\n      const res = arr[key](...args);\n      if (res === -1 || res === false) {\n        return arr[key](...args.map(toRaw));\n      } else {\n        return res;\n      }\n    };\n  });\n  [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\"].forEach((key) => {\n    instrumentations[key] = function(...args) {\n      pauseTracking();\n      const res = toRaw(this)[key].apply(this, args);\n      resetTracking();\n      return res;\n    };\n  });\n  return instrumentations;\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n  return function get3(target, key, receiver) {\n    if (key === \"__v_isReactive\") {\n      return !isReadonly;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly;\n    } else if (key === \"__v_raw\" && receiver === (isReadonly ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) {\n      return target;\n    }\n    const targetIsArray = isArray(target);\n    if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) {\n      return Reflect.get(arrayInstrumentations, key, receiver);\n    }\n    const res = Reflect.get(target, key, receiver);\n    if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n      return res;\n    }\n    if (!isReadonly) {\n      track(target, \"get\", key);\n    }\n    if (shallow) {\n      return res;\n    }\n    if (isRef(res)) {\n      const shouldUnwrap = !targetIsArray || !isIntegerKey(key);\n      return shouldUnwrap ? res.value : res;\n    }\n    if (isObject(res)) {\n      return isReadonly ? readonly(res) : reactive2(res);\n    }\n    return res;\n  };\n}\nvar set2 = /* @__PURE__ */ createSetter();\nfunction createSetter(shallow = false) {\n  return function set3(target, key, value, receiver) {\n    let oldValue = target[key];\n    if (!shallow) {\n      value = toRaw(value);\n      oldValue = toRaw(oldValue);\n      if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n        oldValue.value = value;\n        return true;\n      }\n    }\n    const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);\n    const result = Reflect.set(target, key, value, receiver);\n    if (target === toRaw(receiver)) {\n      if (!hadKey) {\n        trigger(target, \"add\", key, value);\n      } else if (hasChanged(value, oldValue)) {\n        trigger(target, \"set\", key, value, oldValue);\n      }\n    }\n    return result;\n  };\n}\nfunction deleteProperty(target, key) {\n  const hadKey = hasOwn(target, key);\n  const oldValue = target[key];\n  const result = Reflect.deleteProperty(target, key);\n  if (result && hadKey) {\n    trigger(target, \"delete\", key, void 0, oldValue);\n  }\n  return result;\n}\nfunction has(target, key) {\n  const result = Reflect.has(target, key);\n  if (!isSymbol(key) || !builtInSymbols.has(key)) {\n    track(target, \"has\", key);\n  }\n  return result;\n}\nfunction ownKeys(target) {\n  track(target, \"iterate\", isArray(target) ? \"length\" : ITERATE_KEY);\n  return Reflect.ownKeys(target);\n}\nvar mutableHandlers = {\n  get: get2,\n  set: set2,\n  deleteProperty,\n  has,\n  ownKeys\n};\nvar readonlyHandlers = {\n  get: readonlyGet,\n  set(target, key) {\n    if (true) {\n      console.warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n    }\n    return true;\n  },\n  deleteProperty(target, key) {\n    if (true) {\n      console.warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n    }\n    return true;\n  }\n};\nvar toReactive = (value) => isObject(value) ? reactive2(value) : value;\nvar toReadonly = (value) => isObject(value) ? readonly(value) : value;\nvar toShallow = (value) => value;\nvar getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get$1(target, key, isReadonly = false, isShallow = false) {\n  target = target[\n    \"__v_raw\"\n    /* RAW */\n  ];\n  const rawTarget = toRaw(target);\n  const rawKey = toRaw(key);\n  if (key !== rawKey) {\n    !isReadonly && track(rawTarget, \"get\", key);\n  }\n  !isReadonly && track(rawTarget, \"get\", rawKey);\n  const { has: has2 } = getProto(rawTarget);\n  const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n  if (has2.call(rawTarget, key)) {\n    return wrap(target.get(key));\n  } else if (has2.call(rawTarget, rawKey)) {\n    return wrap(target.get(rawKey));\n  } else if (target !== rawTarget) {\n    target.get(key);\n  }\n}\nfunction has$1(key, isReadonly = false) {\n  const target = this[\n    \"__v_raw\"\n    /* RAW */\n  ];\n  const rawTarget = toRaw(target);\n  const rawKey = toRaw(key);\n  if (key !== rawKey) {\n    !isReadonly && track(rawTarget, \"has\", key);\n  }\n  !isReadonly && track(rawTarget, \"has\", rawKey);\n  return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n  target = target[\n    \"__v_raw\"\n    /* RAW */\n  ];\n  !isReadonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n  return Reflect.get(target, \"size\", target);\n}\nfunction add(value) {\n  value = toRaw(value);\n  const target = toRaw(this);\n  const proto = getProto(target);\n  const hadKey = proto.has.call(target, value);\n  if (!hadKey) {\n    target.add(value);\n    trigger(target, \"add\", value, value);\n  }\n  return this;\n}\nfunction set$1(key, value) {\n  value = toRaw(value);\n  const target = toRaw(this);\n  const { has: has2, get: get3 } = getProto(target);\n  let hadKey = has2.call(target, key);\n  if (!hadKey) {\n    key = toRaw(key);\n    hadKey = has2.call(target, key);\n  } else if (true) {\n    checkIdentityKeys(target, has2, key);\n  }\n  const oldValue = get3.call(target, key);\n  target.set(key, value);\n  if (!hadKey) {\n    trigger(target, \"add\", key, value);\n  } else if (hasChanged(value, oldValue)) {\n    trigger(target, \"set\", key, value, oldValue);\n  }\n  return this;\n}\nfunction deleteEntry(key) {\n  const target = toRaw(this);\n  const { has: has2, get: get3 } = getProto(target);\n  let hadKey = has2.call(target, key);\n  if (!hadKey) {\n    key = toRaw(key);\n    hadKey = has2.call(target, key);\n  } else if (true) {\n    checkIdentityKeys(target, has2, key);\n  }\n  const oldValue = get3 ? get3.call(target, key) : void 0;\n  const result = target.delete(key);\n  if (hadKey) {\n    trigger(target, \"delete\", key, void 0, oldValue);\n  }\n  return result;\n}\nfunction clear() {\n  const target = toRaw(this);\n  const hadItems = target.size !== 0;\n  const oldTarget = true ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n  const result = target.clear();\n  if (hadItems) {\n    trigger(target, \"clear\", void 0, void 0, oldTarget);\n  }\n  return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n  return function forEach(callback, thisArg) {\n    const observed = this;\n    const target = observed[\n      \"__v_raw\"\n      /* RAW */\n    ];\n    const rawTarget = toRaw(target);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    !isReadonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n    return target.forEach((value, key) => {\n      return callback.call(thisArg, wrap(value), wrap(key), observed);\n    });\n  };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n  return function(...args) {\n    const target = this[\n      \"__v_raw\"\n      /* RAW */\n    ];\n    const rawTarget = toRaw(target);\n    const targetIsMap = isMap(rawTarget);\n    const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n    const isKeyOnly = method === \"keys\" && targetIsMap;\n    const innerIterator = target[method](...args);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    !isReadonly && track(rawTarget, \"iterate\", isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n    return {\n      // iterator protocol\n      next() {\n        const { value, done } = innerIterator.next();\n        return done ? { value, done } : {\n          value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n          done\n        };\n      },\n      // iterable protocol\n      [Symbol.iterator]() {\n        return this;\n      }\n    };\n  };\n}\nfunction createReadonlyMethod(type) {\n  return function(...args) {\n    if (true) {\n      const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n      console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n    }\n    return type === \"delete\" ? false : this;\n  };\n}\nfunction createInstrumentations() {\n  const mutableInstrumentations2 = {\n    get(key) {\n      return get$1(this, key);\n    },\n    get size() {\n      return size(this);\n    },\n    has: has$1,\n    add,\n    set: set$1,\n    delete: deleteEntry,\n    clear,\n    forEach: createForEach(false, false)\n  };\n  const shallowInstrumentations2 = {\n    get(key) {\n      return get$1(this, key, false, true);\n    },\n    get size() {\n      return size(this);\n    },\n    has: has$1,\n    add,\n    set: set$1,\n    delete: deleteEntry,\n    clear,\n    forEach: createForEach(false, true)\n  };\n  const readonlyInstrumentations2 = {\n    get(key) {\n      return get$1(this, key, true);\n    },\n    get size() {\n      return size(this, true);\n    },\n    has(key) {\n      return has$1.call(this, key, true);\n    },\n    add: createReadonlyMethod(\n      \"add\"\n      /* ADD */\n    ),\n    set: createReadonlyMethod(\n      \"set\"\n      /* SET */\n    ),\n    delete: createReadonlyMethod(\n      \"delete\"\n      /* DELETE */\n    ),\n    clear: createReadonlyMethod(\n      \"clear\"\n      /* CLEAR */\n    ),\n    forEach: createForEach(true, false)\n  };\n  const shallowReadonlyInstrumentations2 = {\n    get(key) {\n      return get$1(this, key, true, true);\n    },\n    get size() {\n      return size(this, true);\n    },\n    has(key) {\n      return has$1.call(this, key, true);\n    },\n    add: createReadonlyMethod(\n      \"add\"\n      /* ADD */\n    ),\n    set: createReadonlyMethod(\n      \"set\"\n      /* SET */\n    ),\n    delete: createReadonlyMethod(\n      \"delete\"\n      /* DELETE */\n    ),\n    clear: createReadonlyMethod(\n      \"clear\"\n      /* CLEAR */\n    ),\n    forEach: createForEach(true, true)\n  };\n  const iteratorMethods = [\"keys\", \"values\", \"entries\", Symbol.iterator];\n  iteratorMethods.forEach((method) => {\n    mutableInstrumentations2[method] = createIterableMethod(method, false, false);\n    readonlyInstrumentations2[method] = createIterableMethod(method, true, false);\n    shallowInstrumentations2[method] = createIterableMethod(method, false, true);\n    shallowReadonlyInstrumentations2[method] = createIterableMethod(method, true, true);\n  });\n  return [\n    mutableInstrumentations2,\n    readonlyInstrumentations2,\n    shallowInstrumentations2,\n    shallowReadonlyInstrumentations2\n  ];\n}\nvar [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* @__PURE__ */ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n  const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations;\n  return (target, key, receiver) => {\n    if (key === \"__v_isReactive\") {\n      return !isReadonly;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly;\n    } else if (key === \"__v_raw\") {\n      return target;\n    }\n    return Reflect.get(hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver);\n  };\n}\nvar mutableCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nvar readonlyCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nfunction checkIdentityKeys(target, has2, key) {\n  const rawKey = toRaw(key);\n  if (rawKey !== key && has2.call(target, rawKey)) {\n    const type = toRawType(target);\n    console.warn(`Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`);\n  }\n}\nvar reactiveMap = /* @__PURE__ */ new WeakMap();\nvar shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nvar readonlyMap = /* @__PURE__ */ new WeakMap();\nvar shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n  switch (rawType) {\n    case \"Object\":\n    case \"Array\":\n      return 1;\n    case \"Map\":\n    case \"Set\":\n    case \"WeakMap\":\n    case \"WeakSet\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getTargetType(value) {\n  return value[\n    \"__v_skip\"\n    /* SKIP */\n  ] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value));\n}\nfunction reactive2(target) {\n  if (target && target[\n    \"__v_isReadonly\"\n    /* IS_READONLY */\n  ]) {\n    return target;\n  }\n  return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\nfunction readonly(target) {\n  return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n  if (!isObject(target)) {\n    if (true) {\n      console.warn(`value cannot be made reactive: ${String(target)}`);\n    }\n    return target;\n  }\n  if (target[\n    \"__v_raw\"\n    /* RAW */\n  ] && !(isReadonly && target[\n    \"__v_isReactive\"\n    /* IS_REACTIVE */\n  ])) {\n    return target;\n  }\n  const existingProxy = proxyMap.get(target);\n  if (existingProxy) {\n    return existingProxy;\n  }\n  const targetType = getTargetType(target);\n  if (targetType === 0) {\n    return target;\n  }\n  const proxy = new Proxy(target, targetType === 2 ? collectionHandlers : baseHandlers);\n  proxyMap.set(target, proxy);\n  return proxy;\n}\nfunction toRaw(observed) {\n  return observed && toRaw(observed[\n    \"__v_raw\"\n    /* RAW */\n  ]) || observed;\n}\nfunction isRef(r) {\n  return Boolean(r && r.__v_isRef === true);\n}\n\n// packages/alpinejs/src/magics/$nextTick.js\nmagic(\"nextTick\", () => nextTick);\n\n// packages/alpinejs/src/magics/$dispatch.js\nmagic(\"dispatch\", (el) => dispatch.bind(dispatch, el));\n\n// packages/alpinejs/src/magics/$watch.js\nmagic(\"watch\", (el, { evaluateLater: evaluateLater2, cleanup: cleanup2 }) => (key, callback) => {\n  let evaluate2 = evaluateLater2(key);\n  let getter = () => {\n    let value;\n    evaluate2((i) => value = i);\n    return value;\n  };\n  let unwatch = watch(getter, callback);\n  cleanup2(unwatch);\n});\n\n// packages/alpinejs/src/magics/$store.js\nmagic(\"store\", getStores);\n\n// packages/alpinejs/src/magics/$data.js\nmagic(\"data\", (el) => scope(el));\n\n// packages/alpinejs/src/magics/$root.js\nmagic(\"root\", (el) => closestRoot(el));\n\n// packages/alpinejs/src/magics/$refs.js\nmagic(\"refs\", (el) => {\n  if (el._x_refs_proxy)\n    return el._x_refs_proxy;\n  el._x_refs_proxy = mergeProxies(getArrayOfRefObject(el));\n  return el._x_refs_proxy;\n});\nfunction getArrayOfRefObject(el) {\n  let refObjects = [];\n  findClosest(el, (i) => {\n    if (i._x_refs)\n      refObjects.push(i._x_refs);\n  });\n  return refObjects;\n}\n\n// packages/alpinejs/src/ids.js\nvar globalIdMemo = {};\nfunction findAndIncrementId(name) {\n  if (!globalIdMemo[name])\n    globalIdMemo[name] = 0;\n  return ++globalIdMemo[name];\n}\nfunction closestIdRoot(el, name) {\n  return findClosest(el, (element) => {\n    if (element._x_ids && element._x_ids[name])\n      return true;\n  });\n}\nfunction setIdRoot(el, name) {\n  if (!el._x_ids)\n    el._x_ids = {};\n  if (!el._x_ids[name])\n    el._x_ids[name] = findAndIncrementId(name);\n}\n\n// packages/alpinejs/src/magics/$id.js\nmagic(\"id\", (el, { cleanup: cleanup2 }) => (name, key = null) => {\n  let cacheKey = `${name}${key ? `-${key}` : \"\"}`;\n  return cacheIdByNameOnElement(el, cacheKey, cleanup2, () => {\n    let root = closestIdRoot(el, name);\n    let id = root ? root._x_ids[name] : findAndIncrementId(name);\n    return key ? `${name}-${id}-${key}` : `${name}-${id}`;\n  });\n});\ninterceptClone((from, to) => {\n  if (from._x_id) {\n    to._x_id = from._x_id;\n  }\n});\nfunction cacheIdByNameOnElement(el, cacheKey, cleanup2, callback) {\n  if (!el._x_id)\n    el._x_id = {};\n  if (el._x_id[cacheKey])\n    return el._x_id[cacheKey];\n  let output = callback();\n  el._x_id[cacheKey] = output;\n  cleanup2(() => {\n    delete el._x_id[cacheKey];\n  });\n  return output;\n}\n\n// packages/alpinejs/src/magics/$el.js\nmagic(\"el\", (el) => el);\n\n// packages/alpinejs/src/magics/index.js\nwarnMissingPluginMagic(\"Focus\", \"focus\", \"focus\");\nwarnMissingPluginMagic(\"Persist\", \"persist\", \"persist\");\nfunction warnMissingPluginMagic(name, magicName, slug) {\n  magic(magicName, (el) => warn(`You can't use [$${magicName}] without first installing the \"${name}\" plugin here: https://alpinejs.dev/plugins/${slug}`, el));\n}\n\n// packages/alpinejs/src/directives/x-modelable.js\ndirective(\"modelable\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2, cleanup: cleanup2 }) => {\n  let func = evaluateLater2(expression);\n  let innerGet = () => {\n    let result;\n    func((i) => result = i);\n    return result;\n  };\n  let evaluateInnerSet = evaluateLater2(`${expression} = __placeholder`);\n  let innerSet = (val) => evaluateInnerSet(() => {\n  }, { scope: { \"__placeholder\": val } });\n  let initialValue = innerGet();\n  innerSet(initialValue);\n  queueMicrotask(() => {\n    if (!el._x_model)\n      return;\n    el._x_removeModelListeners[\"default\"]();\n    let outerGet = el._x_model.get;\n    let outerSet = el._x_model.set;\n    let releaseEntanglement = entangle(\n      {\n        get() {\n          return outerGet();\n        },\n        set(value) {\n          outerSet(value);\n        }\n      },\n      {\n        get() {\n          return innerGet();\n        },\n        set(value) {\n          innerSet(value);\n        }\n      }\n    );\n    cleanup2(releaseEntanglement);\n  });\n});\n\n// packages/alpinejs/src/directives/x-teleport.js\ndirective(\"teleport\", (el, { modifiers, expression }, { cleanup: cleanup2 }) => {\n  if (el.tagName.toLowerCase() !== \"template\")\n    warn(\"x-teleport can only be used on a <template> tag\", el);\n  let target = getTarget(expression);\n  let clone2 = el.content.cloneNode(true).firstElementChild;\n  el._x_teleport = clone2;\n  clone2._x_teleportBack = el;\n  el.setAttribute(\"data-teleport-template\", true);\n  clone2.setAttribute(\"data-teleport-target\", true);\n  if (el._x_forwardEvents) {\n    el._x_forwardEvents.forEach((eventName) => {\n      clone2.addEventListener(eventName, (e) => {\n        e.stopPropagation();\n        el.dispatchEvent(new e.constructor(e.type, e));\n      });\n    });\n  }\n  addScopeToNode(clone2, {}, el);\n  let placeInDom = (clone3, target2, modifiers2) => {\n    if (modifiers2.includes(\"prepend\")) {\n      target2.parentNode.insertBefore(clone3, target2);\n    } else if (modifiers2.includes(\"append\")) {\n      target2.parentNode.insertBefore(clone3, target2.nextSibling);\n    } else {\n      target2.appendChild(clone3);\n    }\n  };\n  mutateDom(() => {\n    placeInDom(clone2, target, modifiers);\n    skipDuringClone(() => {\n      initTree(clone2);\n    })();\n  });\n  el._x_teleportPutBack = () => {\n    let target2 = getTarget(expression);\n    mutateDom(() => {\n      placeInDom(el._x_teleport, target2, modifiers);\n    });\n  };\n  cleanup2(\n    () => mutateDom(() => {\n      clone2.remove();\n      destroyTree(clone2);\n    })\n  );\n});\nvar teleportContainerDuringClone = document.createElement(\"div\");\nfunction getTarget(expression) {\n  let target = skipDuringClone(() => {\n    return document.querySelector(expression);\n  }, () => {\n    return teleportContainerDuringClone;\n  })();\n  if (!target)\n    warn(`Cannot find x-teleport element for selector: \"${expression}\"`);\n  return target;\n}\n\n// packages/alpinejs/src/directives/x-ignore.js\nvar handler = () => {\n};\nhandler.inline = (el, { modifiers }, { cleanup: cleanup2 }) => {\n  modifiers.includes(\"self\") ? el._x_ignoreSelf = true : el._x_ignore = true;\n  cleanup2(() => {\n    modifiers.includes(\"self\") ? delete el._x_ignoreSelf : delete el._x_ignore;\n  });\n};\ndirective(\"ignore\", handler);\n\n// packages/alpinejs/src/directives/x-effect.js\ndirective(\"effect\", skipDuringClone((el, { expression }, { effect: effect3 }) => {\n  effect3(evaluateLater(el, expression));\n}));\n\n// packages/alpinejs/src/utils/on.js\nfunction on(el, event, modifiers, callback) {\n  let listenerTarget = el;\n  let handler4 = (e) => callback(e);\n  let options = {};\n  let wrapHandler = (callback2, wrapper) => (e) => wrapper(callback2, e);\n  if (modifiers.includes(\"dot\"))\n    event = dotSyntax(event);\n  if (modifiers.includes(\"camel\"))\n    event = camelCase2(event);\n  if (modifiers.includes(\"passive\"))\n    options.passive = true;\n  if (modifiers.includes(\"capture\"))\n    options.capture = true;\n  if (modifiers.includes(\"window\"))\n    listenerTarget = window;\n  if (modifiers.includes(\"document\"))\n    listenerTarget = document;\n  if (modifiers.includes(\"debounce\")) {\n    let nextModifier = modifiers[modifiers.indexOf(\"debounce\") + 1] || \"invalid-wait\";\n    let wait = isNumeric(nextModifier.split(\"ms\")[0]) ? Number(nextModifier.split(\"ms\")[0]) : 250;\n    handler4 = debounce(handler4, wait);\n  }\n  if (modifiers.includes(\"throttle\")) {\n    let nextModifier = modifiers[modifiers.indexOf(\"throttle\") + 1] || \"invalid-wait\";\n    let wait = isNumeric(nextModifier.split(\"ms\")[0]) ? Number(nextModifier.split(\"ms\")[0]) : 250;\n    handler4 = throttle(handler4, wait);\n  }\n  if (modifiers.includes(\"prevent\"))\n    handler4 = wrapHandler(handler4, (next, e) => {\n      e.preventDefault();\n      next(e);\n    });\n  if (modifiers.includes(\"stop\"))\n    handler4 = wrapHandler(handler4, (next, e) => {\n      e.stopPropagation();\n      next(e);\n    });\n  if (modifiers.includes(\"once\")) {\n    handler4 = wrapHandler(handler4, (next, e) => {\n      next(e);\n      listenerTarget.removeEventListener(event, handler4, options);\n    });\n  }\n  if (modifiers.includes(\"away\") || modifiers.includes(\"outside\")) {\n    listenerTarget = document;\n    handler4 = wrapHandler(handler4, (next, e) => {\n      if (el.contains(e.target))\n        return;\n      if (e.target.isConnected === false)\n        return;\n      if (el.offsetWidth < 1 && el.offsetHeight < 1)\n        return;\n      if (el._x_isShown === false)\n        return;\n      next(e);\n    });\n  }\n  if (modifiers.includes(\"self\"))\n    handler4 = wrapHandler(handler4, (next, e) => {\n      e.target === el && next(e);\n    });\n  if (isKeyEvent(event) || isClickEvent(event)) {\n    handler4 = wrapHandler(handler4, (next, e) => {\n      if (isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers)) {\n        return;\n      }\n      next(e);\n    });\n  }\n  listenerTarget.addEventListener(event, handler4, options);\n  return () => {\n    listenerTarget.removeEventListener(event, handler4, options);\n  };\n}\nfunction dotSyntax(subject) {\n  return subject.replace(/-/g, \".\");\n}\nfunction camelCase2(subject) {\n  return subject.toLowerCase().replace(/-(\\w)/g, (match, char) => char.toUpperCase());\n}\nfunction isNumeric(subject) {\n  return !Array.isArray(subject) && !isNaN(subject);\n}\nfunction kebabCase2(subject) {\n  if ([\" \", \"_\"].includes(\n    subject\n  ))\n    return subject;\n  return subject.replace(/([a-z])([A-Z])/g, \"$1-$2\").replace(/[_\\s]/, \"-\").toLowerCase();\n}\nfunction isKeyEvent(event) {\n  return [\"keydown\", \"keyup\"].includes(event);\n}\nfunction isClickEvent(event) {\n  return [\"contextmenu\", \"click\", \"mouse\"].some((i) => event.includes(i));\n}\nfunction isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers) {\n  let keyModifiers = modifiers.filter((i) => {\n    return ![\"window\", \"document\", \"prevent\", \"stop\", \"once\", \"capture\", \"self\", \"away\", \"outside\", \"passive\", \"preserve-scroll\"].includes(i);\n  });\n  if (keyModifiers.includes(\"debounce\")) {\n    let debounceIndex = keyModifiers.indexOf(\"debounce\");\n    keyModifiers.splice(debounceIndex, isNumeric((keyModifiers[debounceIndex + 1] || \"invalid-wait\").split(\"ms\")[0]) ? 2 : 1);\n  }\n  if (keyModifiers.includes(\"throttle\")) {\n    let debounceIndex = keyModifiers.indexOf(\"throttle\");\n    keyModifiers.splice(debounceIndex, isNumeric((keyModifiers[debounceIndex + 1] || \"invalid-wait\").split(\"ms\")[0]) ? 2 : 1);\n  }\n  if (keyModifiers.length === 0)\n    return false;\n  if (keyModifiers.length === 1 && keyToModifiers(e.key).includes(keyModifiers[0]))\n    return false;\n  const systemKeyModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\", \"cmd\", \"super\"];\n  const selectedSystemKeyModifiers = systemKeyModifiers.filter((modifier) => keyModifiers.includes(modifier));\n  keyModifiers = keyModifiers.filter((i) => !selectedSystemKeyModifiers.includes(i));\n  if (selectedSystemKeyModifiers.length > 0) {\n    const activelyPressedKeyModifiers = selectedSystemKeyModifiers.filter((modifier) => {\n      if (modifier === \"cmd\" || modifier === \"super\")\n        modifier = \"meta\";\n      return e[`${modifier}Key`];\n    });\n    if (activelyPressedKeyModifiers.length === selectedSystemKeyModifiers.length) {\n      if (isClickEvent(e.type))\n        return false;\n      if (keyToModifiers(e.key).includes(keyModifiers[0]))\n        return false;\n    }\n  }\n  return true;\n}\nfunction keyToModifiers(key) {\n  if (!key)\n    return [];\n  key = kebabCase2(key);\n  let modifierToKeyMap = {\n    \"ctrl\": \"control\",\n    \"slash\": \"/\",\n    \"space\": \" \",\n    \"spacebar\": \" \",\n    \"cmd\": \"meta\",\n    \"esc\": \"escape\",\n    \"up\": \"arrow-up\",\n    \"down\": \"arrow-down\",\n    \"left\": \"arrow-left\",\n    \"right\": \"arrow-right\",\n    \"period\": \".\",\n    \"comma\": \",\",\n    \"equal\": \"=\",\n    \"minus\": \"-\",\n    \"underscore\": \"_\"\n  };\n  modifierToKeyMap[key] = key;\n  return Object.keys(modifierToKeyMap).map((modifier) => {\n    if (modifierToKeyMap[modifier] === key)\n      return modifier;\n  }).filter((modifier) => modifier);\n}\n\n// packages/alpinejs/src/directives/x-model.js\ndirective(\"model\", (el, { modifiers, expression }, { effect: effect3, cleanup: cleanup2 }) => {\n  let scopeTarget = el;\n  if (modifiers.includes(\"parent\")) {\n    scopeTarget = el.parentNode;\n  }\n  let evaluateGet = evaluateLater(scopeTarget, expression);\n  let evaluateSet;\n  if (typeof expression === \"string\") {\n    evaluateSet = evaluateLater(scopeTarget, `${expression} = __placeholder`);\n  } else if (typeof expression === \"function\" && typeof expression() === \"string\") {\n    evaluateSet = evaluateLater(scopeTarget, `${expression()} = __placeholder`);\n  } else {\n    evaluateSet = () => {\n    };\n  }\n  let getValue = () => {\n    let result;\n    evaluateGet((value) => result = value);\n    return isGetterSetter(result) ? result.get() : result;\n  };\n  let setValue = (value) => {\n    let result;\n    evaluateGet((value2) => result = value2);\n    if (isGetterSetter(result)) {\n      result.set(value);\n    } else {\n      evaluateSet(() => {\n      }, {\n        scope: { \"__placeholder\": value }\n      });\n    }\n  };\n  if (typeof expression === \"string\" && el.type === \"radio\") {\n    mutateDom(() => {\n      if (!el.hasAttribute(\"name\"))\n        el.setAttribute(\"name\", expression);\n    });\n  }\n  let event = el.tagName.toLowerCase() === \"select\" || [\"checkbox\", \"radio\"].includes(el.type) || modifiers.includes(\"lazy\") ? \"change\" : \"input\";\n  let removeListener = isCloning ? () => {\n  } : on(el, event, modifiers, (e) => {\n    setValue(getInputValue(el, modifiers, e, getValue()));\n  });\n  if (modifiers.includes(\"fill\")) {\n    if ([void 0, null, \"\"].includes(getValue()) || isCheckbox(el) && Array.isArray(getValue()) || el.tagName.toLowerCase() === \"select\" && el.multiple) {\n      setValue(\n        getInputValue(el, modifiers, { target: el }, getValue())\n      );\n    }\n  }\n  if (!el._x_removeModelListeners)\n    el._x_removeModelListeners = {};\n  el._x_removeModelListeners[\"default\"] = removeListener;\n  cleanup2(() => el._x_removeModelListeners[\"default\"]());\n  if (el.form) {\n    let removeResetListener = on(el.form, \"reset\", [], (e) => {\n      nextTick(() => el._x_model && el._x_model.set(getInputValue(el, modifiers, { target: el }, getValue())));\n    });\n    cleanup2(() => removeResetListener());\n  }\n  el._x_model = {\n    get() {\n      return getValue();\n    },\n    set(value) {\n      setValue(value);\n    }\n  };\n  el._x_forceModelUpdate = (value) => {\n    if (value === void 0 && typeof expression === \"string\" && expression.match(/\\./))\n      value = \"\";\n    window.fromModel = true;\n    mutateDom(() => bind(el, \"value\", value));\n    delete window.fromModel;\n  };\n  effect3(() => {\n    let value = getValue();\n    if (modifiers.includes(\"unintrusive\") && document.activeElement.isSameNode(el))\n      return;\n    el._x_forceModelUpdate(value);\n  });\n});\nfunction getInputValue(el, modifiers, event, currentValue) {\n  return mutateDom(() => {\n    if (event instanceof CustomEvent && event.detail !== void 0)\n      return event.detail !== null && event.detail !== void 0 ? event.detail : event.target.value;\n    else if (isCheckbox(el)) {\n      if (Array.isArray(currentValue)) {\n        let newValue = null;\n        if (modifiers.includes(\"number\")) {\n          newValue = safeParseNumber(event.target.value);\n        } else if (modifiers.includes(\"boolean\")) {\n          newValue = safeParseBoolean(event.target.value);\n        } else {\n          newValue = event.target.value;\n        }\n        return event.target.checked ? currentValue.includes(newValue) ? currentValue : currentValue.concat([newValue]) : currentValue.filter((el2) => !checkedAttrLooseCompare2(el2, newValue));\n      } else {\n        return event.target.checked;\n      }\n    } else if (el.tagName.toLowerCase() === \"select\" && el.multiple) {\n      if (modifiers.includes(\"number\")) {\n        return Array.from(event.target.selectedOptions).map((option) => {\n          let rawValue = option.value || option.text;\n          return safeParseNumber(rawValue);\n        });\n      } else if (modifiers.includes(\"boolean\")) {\n        return Array.from(event.target.selectedOptions).map((option) => {\n          let rawValue = option.value || option.text;\n          return safeParseBoolean(rawValue);\n        });\n      }\n      return Array.from(event.target.selectedOptions).map((option) => {\n        return option.value || option.text;\n      });\n    } else {\n      let newValue;\n      if (isRadio(el)) {\n        if (event.target.checked) {\n          newValue = event.target.value;\n        } else {\n          newValue = currentValue;\n        }\n      } else {\n        newValue = event.target.value;\n      }\n      if (modifiers.includes(\"number\")) {\n        return safeParseNumber(newValue);\n      } else if (modifiers.includes(\"boolean\")) {\n        return safeParseBoolean(newValue);\n      } else if (modifiers.includes(\"trim\")) {\n        return newValue.trim();\n      } else {\n        return newValue;\n      }\n    }\n  });\n}\nfunction safeParseNumber(rawValue) {\n  let number = rawValue ? parseFloat(rawValue) : null;\n  return isNumeric2(number) ? number : rawValue;\n}\nfunction checkedAttrLooseCompare2(valueA, valueB) {\n  return valueA == valueB;\n}\nfunction isNumeric2(subject) {\n  return !Array.isArray(subject) && !isNaN(subject);\n}\nfunction isGetterSetter(value) {\n  return value !== null && typeof value === \"object\" && typeof value.get === \"function\" && typeof value.set === \"function\";\n}\n\n// packages/alpinejs/src/directives/x-cloak.js\ndirective(\"cloak\", (el) => queueMicrotask(() => mutateDom(() => el.removeAttribute(prefix(\"cloak\")))));\n\n// packages/alpinejs/src/directives/x-init.js\naddInitSelector(() => `[${prefix(\"init\")}]`);\ndirective(\"init\", skipDuringClone((el, { expression }, { evaluate: evaluate2 }) => {\n  if (typeof expression === \"string\") {\n    return !!expression.trim() && evaluate2(expression, {}, false);\n  }\n  return evaluate2(expression, {}, false);\n}));\n\n// packages/alpinejs/src/directives/x-text.js\ndirective(\"text\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {\n  let evaluate2 = evaluateLater2(expression);\n  effect3(() => {\n    evaluate2((value) => {\n      mutateDom(() => {\n        el.textContent = value;\n      });\n    });\n  });\n});\n\n// packages/alpinejs/src/directives/x-html.js\ndirective(\"html\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {\n  let evaluate2 = evaluateLater2(expression);\n  effect3(() => {\n    evaluate2((value) => {\n      mutateDom(() => {\n        el.innerHTML = value;\n        el._x_ignoreSelf = true;\n        initTree(el);\n        delete el._x_ignoreSelf;\n      });\n    });\n  });\n});\n\n// packages/alpinejs/src/directives/x-bind.js\nmapAttributes(startingWith(\":\", into(prefix(\"bind:\"))));\nvar handler2 = (el, { value, modifiers, expression, original }, { effect: effect3, cleanup: cleanup2 }) => {\n  if (!value) {\n    let bindingProviders = {};\n    injectBindingProviders(bindingProviders);\n    let getBindings = evaluateLater(el, expression);\n    getBindings((bindings) => {\n      applyBindingsObject(el, bindings, original);\n    }, { scope: bindingProviders });\n    return;\n  }\n  if (value === \"key\")\n    return storeKeyForXFor(el, expression);\n  if (el._x_inlineBindings && el._x_inlineBindings[value] && el._x_inlineBindings[value].extract) {\n    return;\n  }\n  let evaluate2 = evaluateLater(el, expression);\n  effect3(() => evaluate2((result) => {\n    if (result === void 0 && typeof expression === \"string\" && expression.match(/\\./)) {\n      result = \"\";\n    }\n    mutateDom(() => bind(el, value, result, modifiers));\n  }));\n  cleanup2(() => {\n    el._x_undoAddedClasses && el._x_undoAddedClasses();\n    el._x_undoAddedStyles && el._x_undoAddedStyles();\n  });\n};\nhandler2.inline = (el, { value, modifiers, expression }) => {\n  if (!value)\n    return;\n  if (!el._x_inlineBindings)\n    el._x_inlineBindings = {};\n  el._x_inlineBindings[value] = { expression, extract: false };\n};\ndirective(\"bind\", handler2);\nfunction storeKeyForXFor(el, expression) {\n  el._x_keyExpression = expression;\n}\n\n// packages/alpinejs/src/directives/x-data.js\naddRootSelector(() => `[${prefix(\"data\")}]`);\ndirective(\"data\", (el, { expression }, { cleanup: cleanup2 }) => {\n  if (shouldSkipRegisteringDataDuringClone(el))\n    return;\n  expression = expression === \"\" ? \"{}\" : expression;\n  let magicContext = {};\n  injectMagics(magicContext, el);\n  let dataProviderContext = {};\n  injectDataProviders(dataProviderContext, magicContext);\n  let data2 = evaluate(el, expression, { scope: dataProviderContext });\n  if (data2 === void 0 || data2 === true)\n    data2 = {};\n  injectMagics(data2, el);\n  let reactiveData = reactive(data2);\n  initInterceptors(reactiveData);\n  let undo = addScopeToNode(el, reactiveData);\n  reactiveData[\"init\"] && evaluate(el, reactiveData[\"init\"]);\n  cleanup2(() => {\n    reactiveData[\"destroy\"] && evaluate(el, reactiveData[\"destroy\"]);\n    undo();\n  });\n});\ninterceptClone((from, to) => {\n  if (from._x_dataStack) {\n    to._x_dataStack = from._x_dataStack;\n    to.setAttribute(\"data-has-alpine-state\", true);\n  }\n});\nfunction shouldSkipRegisteringDataDuringClone(el) {\n  if (!isCloning)\n    return false;\n  if (isCloningLegacy)\n    return true;\n  return el.hasAttribute(\"data-has-alpine-state\");\n}\n\n// packages/alpinejs/src/directives/x-show.js\ndirective(\"show\", (el, { modifiers, expression }, { effect: effect3 }) => {\n  let evaluate2 = evaluateLater(el, expression);\n  if (!el._x_doHide)\n    el._x_doHide = () => {\n      mutateDom(() => {\n        el.style.setProperty(\"display\", \"none\", modifiers.includes(\"important\") ? \"important\" : void 0);\n      });\n    };\n  if (!el._x_doShow)\n    el._x_doShow = () => {\n      mutateDom(() => {\n        if (el.style.length === 1 && el.style.display === \"none\") {\n          el.removeAttribute(\"style\");\n        } else {\n          el.style.removeProperty(\"display\");\n        }\n      });\n    };\n  let hide = () => {\n    el._x_doHide();\n    el._x_isShown = false;\n  };\n  let show = () => {\n    el._x_doShow();\n    el._x_isShown = true;\n  };\n  let clickAwayCompatibleShow = () => setTimeout(show);\n  let toggle = once(\n    (value) => value ? show() : hide(),\n    (value) => {\n      if (typeof el._x_toggleAndCascadeWithTransitions === \"function\") {\n        el._x_toggleAndCascadeWithTransitions(el, value, show, hide);\n      } else {\n        value ? clickAwayCompatibleShow() : hide();\n      }\n    }\n  );\n  let oldValue;\n  let firstTime = true;\n  effect3(() => evaluate2((value) => {\n    if (!firstTime && value === oldValue)\n      return;\n    if (modifiers.includes(\"immediate\"))\n      value ? clickAwayCompatibleShow() : hide();\n    toggle(value);\n    oldValue = value;\n    firstTime = false;\n  }));\n});\n\n// packages/alpinejs/src/directives/x-for.js\ndirective(\"for\", (el, { expression }, { effect: effect3, cleanup: cleanup2 }) => {\n  let iteratorNames = parseForExpression(expression);\n  let evaluateItems = evaluateLater(el, iteratorNames.items);\n  let evaluateKey = evaluateLater(\n    el,\n    // the x-bind:key expression is stored for our use instead of evaluated.\n    el._x_keyExpression || \"index\"\n  );\n  el._x_prevKeys = [];\n  el._x_lookup = {};\n  effect3(() => loop(el, iteratorNames, evaluateItems, evaluateKey));\n  cleanup2(() => {\n    Object.values(el._x_lookup).forEach((el2) => mutateDom(\n      () => {\n        destroyTree(el2);\n        el2.remove();\n      }\n    ));\n    delete el._x_prevKeys;\n    delete el._x_lookup;\n  });\n});\nfunction loop(el, iteratorNames, evaluateItems, evaluateKey) {\n  let isObject2 = (i) => typeof i === \"object\" && !Array.isArray(i);\n  let templateEl = el;\n  evaluateItems((items) => {\n    if (isNumeric3(items) && items >= 0) {\n      items = Array.from(Array(items).keys(), (i) => i + 1);\n    }\n    if (items === void 0)\n      items = [];\n    let lookup = el._x_lookup;\n    let prevKeys = el._x_prevKeys;\n    let scopes = [];\n    let keys = [];\n    if (isObject2(items)) {\n      items = Object.entries(items).map(([key, value]) => {\n        let scope2 = getIterationScopeVariables(iteratorNames, value, key, items);\n        evaluateKey((value2) => {\n          if (keys.includes(value2))\n            warn(\"Duplicate key on x-for\", el);\n          keys.push(value2);\n        }, { scope: { index: key, ...scope2 } });\n        scopes.push(scope2);\n      });\n    } else {\n      for (let i = 0; i < items.length; i++) {\n        let scope2 = getIterationScopeVariables(iteratorNames, items[i], i, items);\n        evaluateKey((value) => {\n          if (keys.includes(value))\n            warn(\"Duplicate key on x-for\", el);\n          keys.push(value);\n        }, { scope: { index: i, ...scope2 } });\n        scopes.push(scope2);\n      }\n    }\n    let adds = [];\n    let moves = [];\n    let removes = [];\n    let sames = [];\n    for (let i = 0; i < prevKeys.length; i++) {\n      let key = prevKeys[i];\n      if (keys.indexOf(key) === -1)\n        removes.push(key);\n    }\n    prevKeys = prevKeys.filter((key) => !removes.includes(key));\n    let lastKey = \"template\";\n    for (let i = 0; i < keys.length; i++) {\n      let key = keys[i];\n      let prevIndex = prevKeys.indexOf(key);\n      if (prevIndex === -1) {\n        prevKeys.splice(i, 0, key);\n        adds.push([lastKey, i]);\n      } else if (prevIndex !== i) {\n        let keyInSpot = prevKeys.splice(i, 1)[0];\n        let keyForSpot = prevKeys.splice(prevIndex - 1, 1)[0];\n        prevKeys.splice(i, 0, keyForSpot);\n        prevKeys.splice(prevIndex, 0, keyInSpot);\n        moves.push([keyInSpot, keyForSpot]);\n      } else {\n        sames.push(key);\n      }\n      lastKey = key;\n    }\n    for (let i = 0; i < removes.length; i++) {\n      let key = removes[i];\n      if (!(key in lookup))\n        continue;\n      mutateDom(() => {\n        destroyTree(lookup[key]);\n        lookup[key].remove();\n      });\n      delete lookup[key];\n    }\n    for (let i = 0; i < moves.length; i++) {\n      let [keyInSpot, keyForSpot] = moves[i];\n      let elInSpot = lookup[keyInSpot];\n      let elForSpot = lookup[keyForSpot];\n      let marker = document.createElement(\"div\");\n      mutateDom(() => {\n        if (!elForSpot)\n          warn(`x-for \":key\" is undefined or invalid`, templateEl, keyForSpot, lookup);\n        elForSpot.after(marker);\n        elInSpot.after(elForSpot);\n        elForSpot._x_currentIfEl && elForSpot.after(elForSpot._x_currentIfEl);\n        marker.before(elInSpot);\n        elInSpot._x_currentIfEl && elInSpot.after(elInSpot._x_currentIfEl);\n        marker.remove();\n      });\n      elForSpot._x_refreshXForScope(scopes[keys.indexOf(keyForSpot)]);\n    }\n    for (let i = 0; i < adds.length; i++) {\n      let [lastKey2, index] = adds[i];\n      let lastEl = lastKey2 === \"template\" ? templateEl : lookup[lastKey2];\n      if (lastEl._x_currentIfEl)\n        lastEl = lastEl._x_currentIfEl;\n      let scope2 = scopes[index];\n      let key = keys[index];\n      let clone2 = document.importNode(templateEl.content, true).firstElementChild;\n      let reactiveScope = reactive(scope2);\n      addScopeToNode(clone2, reactiveScope, templateEl);\n      clone2._x_refreshXForScope = (newScope) => {\n        Object.entries(newScope).forEach(([key2, value]) => {\n          reactiveScope[key2] = value;\n        });\n      };\n      mutateDom(() => {\n        lastEl.after(clone2);\n        skipDuringClone(() => initTree(clone2))();\n      });\n      if (typeof key === \"object\") {\n        warn(\"x-for key cannot be an object, it must be a string or an integer\", templateEl);\n      }\n      lookup[key] = clone2;\n    }\n    for (let i = 0; i < sames.length; i++) {\n      lookup[sames[i]]._x_refreshXForScope(scopes[keys.indexOf(sames[i])]);\n    }\n    templateEl._x_prevKeys = keys;\n  });\n}\nfunction parseForExpression(expression) {\n  let forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\n  let stripParensRE = /^\\s*\\(|\\)\\s*$/g;\n  let forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\n  let inMatch = expression.match(forAliasRE);\n  if (!inMatch)\n    return;\n  let res = {};\n  res.items = inMatch[2].trim();\n  let item = inMatch[1].replace(stripParensRE, \"\").trim();\n  let iteratorMatch = item.match(forIteratorRE);\n  if (iteratorMatch) {\n    res.item = item.replace(forIteratorRE, \"\").trim();\n    res.index = iteratorMatch[1].trim();\n    if (iteratorMatch[2]) {\n      res.collection = iteratorMatch[2].trim();\n    }\n  } else {\n    res.item = item;\n  }\n  return res;\n}\nfunction getIterationScopeVariables(iteratorNames, item, index, items) {\n  let scopeVariables = {};\n  if (/^\\[.*\\]$/.test(iteratorNames.item) && Array.isArray(item)) {\n    let names = iteratorNames.item.replace(\"[\", \"\").replace(\"]\", \"\").split(\",\").map((i) => i.trim());\n    names.forEach((name, i) => {\n      scopeVariables[name] = item[i];\n    });\n  } else if (/^\\{.*\\}$/.test(iteratorNames.item) && !Array.isArray(item) && typeof item === \"object\") {\n    let names = iteratorNames.item.replace(\"{\", \"\").replace(\"}\", \"\").split(\",\").map((i) => i.trim());\n    names.forEach((name) => {\n      scopeVariables[name] = item[name];\n    });\n  } else {\n    scopeVariables[iteratorNames.item] = item;\n  }\n  if (iteratorNames.index)\n    scopeVariables[iteratorNames.index] = index;\n  if (iteratorNames.collection)\n    scopeVariables[iteratorNames.collection] = items;\n  return scopeVariables;\n}\nfunction isNumeric3(subject) {\n  return !Array.isArray(subject) && !isNaN(subject);\n}\n\n// packages/alpinejs/src/directives/x-ref.js\nfunction handler3() {\n}\nhandler3.inline = (el, { expression }, { cleanup: cleanup2 }) => {\n  let root = closestRoot(el);\n  if (!root._x_refs)\n    root._x_refs = {};\n  root._x_refs[expression] = el;\n  cleanup2(() => delete root._x_refs[expression]);\n};\ndirective(\"ref\", handler3);\n\n// packages/alpinejs/src/directives/x-if.js\ndirective(\"if\", (el, { expression }, { effect: effect3, cleanup: cleanup2 }) => {\n  if (el.tagName.toLowerCase() !== \"template\")\n    warn(\"x-if can only be used on a <template> tag\", el);\n  let evaluate2 = evaluateLater(el, expression);\n  let show = () => {\n    if (el._x_currentIfEl)\n      return el._x_currentIfEl;\n    let clone2 = el.content.cloneNode(true).firstElementChild;\n    addScopeToNode(clone2, {}, el);\n    mutateDom(() => {\n      el.after(clone2);\n      skipDuringClone(() => initTree(clone2))();\n    });\n    el._x_currentIfEl = clone2;\n    el._x_undoIf = () => {\n      mutateDom(() => {\n        destroyTree(clone2);\n        clone2.remove();\n      });\n      delete el._x_currentIfEl;\n    };\n    return clone2;\n  };\n  let hide = () => {\n    if (!el._x_undoIf)\n      return;\n    el._x_undoIf();\n    delete el._x_undoIf;\n  };\n  effect3(() => evaluate2((value) => {\n    value ? show() : hide();\n  }));\n  cleanup2(() => el._x_undoIf && el._x_undoIf());\n});\n\n// packages/alpinejs/src/directives/x-id.js\ndirective(\"id\", (el, { expression }, { evaluate: evaluate2 }) => {\n  let names = evaluate2(expression);\n  names.forEach((name) => setIdRoot(el, name));\n});\ninterceptClone((from, to) => {\n  if (from._x_ids) {\n    to._x_ids = from._x_ids;\n  }\n});\n\n// packages/alpinejs/src/directives/x-on.js\nmapAttributes(startingWith(\"@\", into(prefix(\"on:\"))));\ndirective(\"on\", skipDuringClone((el, { value, modifiers, expression }, { cleanup: cleanup2 }) => {\n  let evaluate2 = expression ? evaluateLater(el, expression) : () => {\n  };\n  if (el.tagName.toLowerCase() === \"template\") {\n    if (!el._x_forwardEvents)\n      el._x_forwardEvents = [];\n    if (!el._x_forwardEvents.includes(value))\n      el._x_forwardEvents.push(value);\n  }\n  let removeListener = on(el, value, modifiers, (e) => {\n    evaluate2(() => {\n    }, { scope: { \"$event\": e }, params: [e] });\n  });\n  cleanup2(() => removeListener());\n}));\n\n// packages/alpinejs/src/directives/index.js\nwarnMissingPluginDirective(\"Collapse\", \"collapse\", \"collapse\");\nwarnMissingPluginDirective(\"Intersect\", \"intersect\", \"intersect\");\nwarnMissingPluginDirective(\"Focus\", \"trap\", \"focus\");\nwarnMissingPluginDirective(\"Mask\", \"mask\", \"mask\");\nfunction warnMissingPluginDirective(name, directiveName, slug) {\n  directive(directiveName, (el) => warn(`You can't use [x-${directiveName}] without first installing the \"${name}\" plugin here: https://alpinejs.dev/plugins/${slug}`, el));\n}\n\n// packages/alpinejs/src/index.js\nalpine_default.setEvaluator(normalEvaluator);\nalpine_default.setReactivityEngine({ reactive: reactive2, effect: effect2, release: stop, raw: toRaw });\nvar src_default = alpine_default;\n\n// packages/alpinejs/builds/module.js\nvar module_default = src_default;\nexport {\n  src_default as Alpine,\n  module_default as default\n};\n", "import anchor from \"@alpinejs/anchor\";\nimport Alpine from \"alpinejs\";\nimport Swal from \"sweetalert2\";\nimport bulkAddTimeEntries from \"./components/bulk-add-timeentries\";\nimport chart from \"./components/chart\";\nimport clock from \"./components/clock\";\nimport companyLogoUploadPreview from \"./components/company-logo-upload-preview\";\nimport confirmButton from \"./components/confirm-btn\";\nimport dailyTimeline from \"./components/daily-timeline\";\nimport dateTimePicker from \"./components/datetime-picker\";\nimport documentForm from \"./components/document-form\";\nimport documentFormLineItemSelector from \"./components/documents/document-form-line-item-selector\";\nimport documentList from \"./components/documents/document-list\";\nimport selectTimeEntriesLineItems from \"./components/documents/select-time-entries-line-items\";\nimport importTimeEntriesModal from \"./components/importTimeEntriesModal\";\nimport invoiceForm from \"./components/invoice-form\";\nimport modal from \"./components/modal\";\nimport paddleCheckout from \"./components/paddle-checkout\";\nimport projectTimeEntries from \"./components/project-time-entries\";\nimport switchBtn from \"./components/switch-btn\";\nimport taskForm from \"./components/task-form\";\nimport timesheet from \"./components/timesheet\";\nimport timesheetDatePicker from \"./components/timesheet-date-picker\";\nimport timesheetsForm from \"./components/timesheets-form\";\nimport { getCookie } from \"./utils\";\nwindow.Alpine = Alpine;\n\nAlpine.plugin(anchor);\n\n// Attach events\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  document.dispatchEvent(new Event(\"initDatePicker\"));\n  Alpine.start();\n});\n\ndocument.addEventListener(\"htmx:configRequest\", (evt) => {\n  evt.detail.headers[\"X-CSRFTOKEN\"] = getCookie(\"csrftoken\");\n});\n\ndocument.addEventListener(\"htmx-not-found\", () => {\n  Swal.fire({\n    title: \"Error\",\n    text: \"The requested resource was not found\",\n    icon: \"error\",\n  });\n});\n\ndocument.addEventListener(\"alpine:init\", () => {\n  Alpine.data(\"companyLogoUploadPreview\", companyLogoUploadPreview);\n  Alpine.data(\"confirmButton\", confirmButton);\n  Alpine.data(\"printElementButton\", () => ({\n    selector: null,\n    init() {\n      this.selector = this.$el.dataset.selector;\n    },\n    handleClick() {\n      document.querySelector(this.selector).contentWindow.print();\n    },\n  }));\n  Alpine.data(\"documentList\", documentList);\n  Alpine.data(\"cancelProjectCreationButton\", () => ({\n    handleClick() {\n      this.$dispatch(\"project:create:cancelled\");\n    },\n  }));\n  Alpine.data(\"taskForm\", taskForm);\n  Alpine.data(\"timesheetsForm\", timesheetsForm);\n  Alpine.data(\"documentForm\", documentForm);\n  Alpine.data(\"documentFormLineItemSelector\", documentFormLineItemSelector);\n  Alpine.data(\"clock\", clock);\n  Alpine.data(\"chart\", chart);\n  Alpine.data(\"modal\", modal);\n  Alpine.data(\"paddleCheckout\", paddleCheckout);\n  Alpine.data(\"timesheet\", timesheet);\n  Alpine.data(\"timesheetDatePicker\", timesheetDatePicker);\n  Alpine.data(\"dateTimePicker\", dateTimePicker);\n  Alpine.data(\"dailyTimeline\", dailyTimeline);\n  Alpine.data(\"projectTimeEntries\", projectTimeEntries);\n  Alpine.data(\"switchBtn\", switchBtn);\n  Alpine.data(\"selectTimeEntriesLineItems\", selectTimeEntriesLineItems);\n  Alpine.data(\"bulkAddTimeEntries\", bulkAddTimeEntries);\n  Alpine.data(\"invoiceForm\", invoiceForm);\n  Alpine.data(\"importTimeEntriesModal\", importTimeEntriesModal);\n});\n", "export default function bulkAddTimeEntries() {\n  return {\n    addedEntries: 0,\n    projectChoices: null,\n    init() {\n      const { projectChoices } = this.$el.dataset;\n      this.projectChoices = JSON.parse(projectChoices);\n    },\n    setNames() {\n      const formBody = document.getElementById(\"form-tbody\");\n      const rows = formBody.querySelectorAll(\"tr\");\n      rows.forEach((row, idx) => {\n        const inputs = Array.from(row.querySelectorAll(\"input\"));\n        const selects = Array.from(row.querySelectorAll(\"select\"));\n        for (const elem of [inputs, selects].flat()) {\n          const prevNameParts = elem.getAttribute(\"name\").split(\"-\");\n          const prevName = prevNameParts[prevNameParts.length - 1];\n          elem.setAttribute(\"name\", `form-${idx}-${prevName}`);\n        }\n      });\n    },\n    updateManagement() {\n      const totalForms = document.getElementById(\"id_form-TOTAL_FORMS\");\n      totalForms.value = this.addedEntries + 1;\n    },\n    removeEntry() {\n      if (this.addedEntries > 0) {\n        const row = this.$event.target.closest(\"tr\");\n        row.remove();\n        this.setNames();\n        this.updateManagement();\n      }\n    },\n    addEntry() {\n      const tmpl = document.getElementById(\"form-row-template\");\n      const node = document.importNode(tmpl.content, true);\n      const tbody = document.getElementById(\"form-tbody\");\n      tbody.appendChild(node);\n      this.addedEntries += 1;\n      this.setNames();\n      this.updateManagement();\n    },\n  };\n}\n", "/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n", "/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n  /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n  let id = 0;\n  return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n  return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n  return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n  isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n  fn: T | undefined,\n  args: unknown[],\n  thisArg?: TA\n): R | undefined {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n  loopable: Record<string, T>,\n  fn: (this: TA, v: T, i: string) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[],\n  fn: (this: TA, v: T, i: number) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[] | Record<string, T>,\n  fn: (this: TA, v: T, i: any) => void,\n  thisArg?: TA,\n  reverse?: boolean\n) {\n  let i: number, len: number, keys: string[];\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n  let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n  if (isArray(source)) {\n    return source.map(clone) as unknown as T;\n  }\n\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone(source[keys[k]]);\n    }\n\n    return target;\n  }\n\n  return source;\n}\n\nfunction isValidKey(key: string) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone(sval);\n  }\n}\n\nexport interface MergeOptions {\n  merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n  target: T,\n  source: [S1, S2, S3, S4],\n  options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n\n  if (!isObject(target)) {\n    return target as AnyObject;\n  }\n\n  options = options || {};\n  const merger = options.merger || _merger;\n  let current: AnyObject;\n\n  for (let i = 0; i < ilen; ++i) {\n    current = sources[i];\n    if (!isObject(current)) {\n      continue;\n    }\n\n    const keys = Object.keys(current);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, current, options as AnyObject);\n    }\n  }\n\n  return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone(sval);\n  }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n      '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n  // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n  '': v => v,\n  // default resolvers\n  x: o => o.x,\n  y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n  const parts = key.split('.');\n  const keys: string[] = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        // For backward compatibility:\n        // Chart.helpers.core resolveObjectKey should break at empty key\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n", "import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n  return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n  const result: number[] = [];\n  const sqrt = Math.sqrt(value);\n  let i: number;\n\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) { // if value is a square number\n    result.push(sqrt);\n  }\n\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n  return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n  return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n  array: Record<string, number>[],\n  target: { min: number, max: number },\n  property: string\n) {\n  let i: number, ilen: number, value: number;\n\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\n\nexport function toRadians(degrees: number) {\n  return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n  return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n  if (!isFiniteNumber(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n  centrePoint: Point,\n  anglePoint: Point\n) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n  if (angle < (-0.5 * PI)) {\n    angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n  }\n\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n  return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n  return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n  return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n", "import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n  table: number[],\n  value: number,\n  cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n  table: T[],\n  value: number,\n  cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n  table: unknown[],\n  value: number,\n  cmp?: (value: number) => boolean\n) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid: number;\n\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number,\n  last?: boolean\n) =>\n  _lookup(table, value, last\n    ? index => {\n      const ti = table[index][key];\n      return ti < value || ti === value && table[index + 1][key] === value;\n    }\n    : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number\n) =>\n  _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n  let start = 0;\n  let end = values.length;\n\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n  _onDataPush?(...item: T[]): void;\n  _onDataPop?(): void;\n  _onDataShift?(): void;\n  _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n  _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n\n        return res;\n      }\n    });\n  });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n\n  if (listeners.length > 0) {\n    return;\n  }\n\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n\n  delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n  const set = new Set<T>(items);\n\n  if (set.size === items.length) {\n    return items;\n  }\n\n  return Array.from(set);\n}\n", "import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n  fn: (...args: TArgs) => void,\n  thisArg: any,\n) {\n  let argsToUse = [] as TArgs;\n  let ticking = false;\n\n  return function(...args: TArgs) {\n    // Save the args for use later\n    argsToUse = args;\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, argsToUse);\n      });\n    }\n  };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n  let timeout;\n  return function(...args: TArgs) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count = pointCount;\n\n  if (meta._sorted) {\n    const {iScale, vScale, _parsed} = meta;\n    const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n    if (minDefined) {\n      start = Math.min(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, axis, min).lo,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n      if (spanGaps) {\n        const distanceToDefinedLo = (_parsed\n          .slice(0, start + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        start -= Math.max(0, distanceToDefinedLo);\n      }\n      start = _limitValue(start, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n      let end = Math.max(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n      if (spanGaps) {\n        const distanceToDefinedHi = (_parsed\n          .slice(end - 1)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        end += Math.max(0, distanceToDefinedHi);\n      }\n      count = _limitValue(end, start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n\n  return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n", "import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n  linear: (t: number) => t,\n\n  easeInQuad: (t: number) => t * t,\n\n  easeOutQuad: (t: number) => -t * (t - 2),\n\n  easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n\n  easeInCubic: (t: number) => t * t * t,\n\n  easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n  easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n\n  easeInQuart: (t: number) => t * t * t * t,\n\n  easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n  easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n\n  easeInQuint: (t: number) => t * t * t * t * t,\n\n  easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n  easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n  easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n  easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n  easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n  easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n  easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n  easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n  easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n  easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n  easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n  easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n  easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n  easeInOutElastic(t: number) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n\n  easeInBack(t: number) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n\n  easeOutBack(t: number) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n\n  easeInOutBack(t: number) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n\n  easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n  easeOutBounce(t: number) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n\n  easeInOutBounce: (t: number) => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n", "import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n\n  return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n  value:\n  | string\n  | { r: number; g: number; b: number; a: number }\n  | [number, number, number]\n  | [number, number, number, number]\n): Color;\nexport function color(value) {\n  return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n", "const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n  defaults.set('animation', {\n    delay: undefined,\n    duration: 1000,\n    easing: 'easeOutQuart',\n    fn: undefined,\n    from: undefined,\n    loop: undefined,\n    to: undefined,\n    type: undefined,\n  });\n\n  defaults.describe('animation', {\n    _fallback: false,\n    _indexable: false,\n    _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n  });\n\n  defaults.set('animations', {\n    colors: {\n      type: 'color',\n      properties: colors\n    },\n    numbers: {\n      type: 'number',\n      properties: numbers\n    },\n  });\n\n  defaults.describe('animations', {\n    _fallback: 'animation',\n  });\n\n  defaults.set('transitions', {\n    active: {\n      animation: {\n        duration: 400\n      }\n    },\n    resize: {\n      animation: {\n        duration: 0\n      }\n    },\n    show: {\n      animations: {\n        colors: {\n          from: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          duration: 0 // show immediately\n        },\n      }\n    },\n    hide: {\n      animations: {\n        colors: {\n          to: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          easing: 'linear',\n          fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n        },\n      }\n    }\n  });\n}\n", "export function applyLayoutsDefaults(defaults) {\n  defaults.set('layout', {\n    autoPadding: true,\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }\n  });\n}\n", "\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n  return getNumberFormat(locale, options).format(num);\n}\n", "import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n  /**\n   * Formatter for value labels\n   * @method Chart.Ticks.formatters.values\n   * @param value the value to display\n   * @return {string|string[]} the label to display\n   */\n  values(value) {\n    return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n  },\n\n  /**\n   * Formatter for numeric ticks\n   * @method Chart.Ticks.formatters.numeric\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0'; // never show decimal places for 0\n    }\n\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n    if (ticks.length > 1) {\n      // all ticks are small or there huge numbers; use scientific notation\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n\n      delta = calculateDelta(tickValue, ticks);\n    }\n\n    const logDelta = log10(Math.abs(delta));\n\n    // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n    // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n    // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n    //\n    // toFixed has a max of 20 decimal places\n    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n\n    return formatNumber(tickValue, locale, options);\n  },\n\n\n  /**\n   * Formatter for logarithmic ticks\n   * @method Chart.Ticks.formatters.logarithmic\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n    if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n  // Figure out how many digits to show\n  // The space between the first two ticks might be smaller than normal spacing\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n  // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    // not an integer\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n", "import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n  defaults.set('scale', {\n    display: true,\n    offset: false,\n    reverse: false,\n    beginAtZero: false,\n\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 3.0.0\n     */\n    bounds: 'ticks',\n\n    clip: true,\n\n    /**\n     * Addition grace added to max and reduced from min data value.\n     * @since 3.0.0\n     */\n    grace: 0,\n\n    // grid line settings\n    grid: {\n      display: true,\n      lineWidth: 1,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickLength: 8,\n      tickWidth: (_ctx, options) => options.lineWidth,\n      tickColor: (_ctx, options) => options.color,\n      offset: false,\n    },\n\n    border: {\n      display: true,\n      dash: [],\n      dashOffset: 0.0,\n      width: 1\n    },\n\n    // scale title\n    title: {\n      // display property\n      display: false,\n\n      // actual label\n      text: '',\n\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n\n    // label settings\n    ticks: {\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      textStrokeWidth: 0,\n      textStrokeColor: '',\n      padding: 3,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 3,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: Ticks.formatters.values,\n      minor: {},\n      major: {},\n      align: 'center',\n      crossAlign: 'near',\n\n      showLabelBackdrop: false,\n      backdropColor: 'rgba(255, 255, 255, 0.75)',\n      backdropPadding: 2,\n    }\n  });\n\n  defaults.route('scale.ticks', 'color', '', 'color');\n  defaults.route('scale.grid', 'color', '', 'borderColor');\n  defaults.route('scale.border', 'color', '', 'borderColor');\n  defaults.route('scale.title', 'color', '', 'color');\n\n  defaults.describe('scale', {\n    _fallback: false,\n    _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n    _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n  });\n\n  defaults.describe('scales', {\n    _fallback: 'scale',\n  });\n\n  defaults.describe('scale.ticks', {\n    _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n    _indexable: (name) => name !== 'backdropPadding',\n  });\n}\n", "import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\n\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope(root, scope), values);\n  }\n  return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n  constructor(_descriptors, _appliers) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n\n    this.describe(_descriptors);\n    this.apply(_appliers);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n\n  /**\n\t * @param {string} scope\n\t */\n  get(scope) {\n    return getScope(this, scope);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n\n  /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t *   - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope(this, scope);\n    const targetScopeObject = getScope(this, targetScope);\n    const privateName = '_' + name;\n\n    Object.defineProperties(scopeObject, {\n      // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n\n  apply(appliers) {\n    appliers.forEach((apply) => apply(this));\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n", "import type {\n  Chart,\n  Point,\n  FontSpec,\n  CanvasFontSpec,\n  PointStyle,\n  RenderTextOpts,\n  BackdropOptions\n} from '../types/index.js';\nimport type {\n  TRBL,\n  SplinePoint,\n  RoundedRect,\n  TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n  ctx: CanvasRenderingContext2D,\n  data: Record<string, number>,\n  gc: string[],\n  longest: number,\n  string: string\n) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n  ctx: CanvasRenderingContext2D,\n  font: string,\n  arrayOfThings: Things,\n  cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n\n  ctx.save();\n\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n\n    // Undefined strings and arrays should not be measured\n    if (thing !== undefined && thing !== null && !isArray(thing)) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      // if it is an array lets measure each element\n      // to do maybe simplify this function a bit so we can do this more recursively?\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        // Undefined strings and arrays should not be measured\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n\n  ctx.restore();\n\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n  if (!ctx && !canvas) {\n    return;\n  }\n\n  ctx = ctx || canvas.getContext('2d');\n\n  ctx.save();\n  // canvas.width and canvas.height do not consider the canvas transform,\n  // while clearRect does\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\n\nexport interface DrawPointOptions {\n  pointStyle: PointStyle;\n  rotation?: number;\n  radius: number;\n  borderWidth: number;\n}\n\nexport function drawPoint(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number\n) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number,\n  w: number\n) {\n  let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n\n  ctx.beginPath();\n\n  switch (style) {\n  // Default includes circle\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case 'triangle':\n      width = w ? w / 2 : radius;\n      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case 'rectRounded':\n    // NOTE: the rounded rect implementation changed to use `arc` instead of\n    // `quadraticCurveTo` since it generates better results when rect is\n    // almost a circle. 0.516 (instead of 0.5) produces results with visually\n    // closer proportion to the previous impl and it is inscribed in the\n    // circle with `radius`. For more details, see the following PRs:\n    // https://github.com/chartjs/Chart.js/issues/5597\n    // https://github.com/chartjs/Chart.js/issues/5858\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'rectRot':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      ctx.closePath();\n      break;\n    case 'crossRot':\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'cross':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'star':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      rad += QUARTER_PI;\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'line':\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n      break;\n    case false:\n      ctx.closePath();\n      break;\n  }\n\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n  point: Point,\n  area: TRBL,\n  margin?: number\n) {\n  margin = margin || 0.5; // margin - default is to match rounded decimals\n\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n  ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n  ctx: CanvasRenderingContext2D,\n  previous: Point,\n  target: Point,\n  flip?: boolean,\n  mode?: string\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n  ctx: CanvasRenderingContext2D,\n  previous: SplinePoint,\n  target: SplinePoint,\n  flip?: boolean\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\n\nfunction decorateText(\n  ctx: CanvasRenderingContext2D,\n  x: number,\n  y: number,\n  line: string,\n  opts: RenderTextOpts\n) {\n  if (opts.strikethrough || opts.underline) {\n    /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n  const oldColor = ctx.fillStyle;\n\n  ctx.fillStyle = opts.color as string;\n  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n  ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n  ctx: CanvasRenderingContext2D,\n  text: string | string[],\n  x: number,\n  y: number,\n  font: CanvasFontSpec,\n  opts: RenderTextOpts = {}\n) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i: number, line: string;\n\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n\n    if (opts.backdrop) {\n      drawBackdrop(ctx, opts.backdrop);\n    }\n\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n\n    y += Number(font.lineHeight);\n  }\n\n  ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n  ctx: CanvasRenderingContext2D,\n  rect: RoundedRect & { radius: TRBLCorners }\n) {\n  const {x, y, w, h, radius} = rect;\n\n  // top left arc\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n  // line from top left to bottom left\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n\n  // bottom left arc\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n  // line from bottom left to bottom right\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n  // bottom right arc\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n  // line from bottom right to top right\n  ctx.lineTo(x + w, y + radius.topRight);\n\n  // top right arc\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n  // line from top right to top left\n  ctx.lineTo(x + radius.topLeft, y);\n}\n", "import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n\n  value = +matches[2];\n\n  switch (matches[3]) {\n    case 'px':\n      return value;\n    case '%':\n      value /= 100;\n      break;\n    default:\n      break;\n  }\n\n  return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n  const obj = toTRBL(value) as ChartArea;\n\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n\n  return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n  options = options || {};\n  fallback = fallback || defaults.font as FontSpec;\n\n  let size = valueOrDefault(options.size, fallback.size);\n\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = undefined;\n  }\n\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n\n  font.string = toFontString(font);\n  return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n  let cacheable = true;\n  let i: number, ilen: number, value: unknown;\n\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n  return Object.assign(Object.create(parentContext), context);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n  ResolverObjectKey,\n  ResolverCache,\n  ResolverProxy,\n  DescriptorDefaults,\n  Descriptor,\n  ContextCache,\n  ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  scopes: T,\n  prefixes = [''],\n  rootScopes?: R,\n  fallback?: ResolverObjectKey,\n  getTarget = () => scopes[0]\n) {\n  const finalRootScopes = rootScopes || scopes;\n  if (typeof fallback === 'undefined') {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache: ResolverCache<T, R> = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: finalRootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop: string) {\n      delete target[prop]; // remove from cache\n      delete target._keys; // remove cached keys\n      delete scopes[0][prop]; // remove from top level scope\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop: string) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop: string, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value; // set to top level scope + cache\n      delete target._keys; // remove cached keys\n      return true;\n    }\n  }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  proxy: ResolverProxy<T, R>,\n  context: AnyObject,\n  subProxy?: ResolverProxy<T, R>,\n  descriptorDefaults?: DescriptorDefaults\n) {\n  const cache: ContextCache<T, R> = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n      delete proxy[prop]; // remove from proxy\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop, value) {\n      proxy[prop] = value; // set to proxy\n      delete target[prop]; // remove from cache\n      return true;\n    }\n  }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n  proxy: ResolverCache,\n  defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n  target: AnyObject,\n  prop: string,\n  resolve: () => unknown\n) {\n  if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n    return target[prop];\n  }\n\n  const value = resolve();\n  // cache the resolved value\n  target[prop] = value;\n  return value;\n}\n\nfunction _resolveWithContext(\n  target: ContextCache,\n  prop: string,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop]; // resolve from proxy\n\n  // resolve with context\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    // if the resolved value is an object, create a sub resolver for it\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\n\nfunction _resolveScriptable(\n  prop: string,\n  getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n  target: ContextCache,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  let value = getValue(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    // When scriptable option returns an object, create a resolver on that.\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\n\nfunction _resolveArray(\n  prop: string,\n  value: unknown[],\n  target: ContextCache,\n  isIndexable: (key: string) => boolean\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n  if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n    return value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    // Array of objects, return array or resolvers\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\n\nfunction resolveFallback(\n  fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n  set: Set<AnyObject>,\n  parentScopes: AnyObject[],\n  key: ResolverObjectKey,\n  parentFallback: ResolverObjectKey,\n  value: unknown\n) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n        // When we reach the descriptor that defines a new _fallback, return that.\n        // The fallback will resume to that new scope.\n        return fallback;\n      }\n    } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n      // Fallback to `false` results to `false`, when falling back to different key.\n      // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n      return null;\n    }\n  }\n  return false;\n}\n\nfunction createSubResolver(\n  parentScopes: AnyObject[],\n  resolver: ResolverCache,\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set<AnyObject>();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (typeof fallback !== 'undefined' && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n  set: Set<AnyObject>,\n  allScopes: AnyObject[],\n  key: ResolverObjectKey,\n  fallback: ResolverObjectKey,\n  item: unknown\n) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\n\nfunction subGetTarget(\n  resolver: ResolverCache,\n  prop: string,\n  value: unknown\n) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    // For array of objects, the object is used to store updated values\n    return value;\n  }\n  return target || {};\n}\n\nfunction _resolveWithPrefixes(\n  prop: string,\n  prefixes: string[],\n  scopes: AnyObject[],\n  proxy: ResolverProxy\n) {\n  let value: unknown;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (typeof value !== 'undefined') {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (typeof value !== 'undefined') {\n      return value;\n    }\n  }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n  const set = new Set<string>();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n  meta: ChartMeta<'line' | 'scatter'>,\n  data: AnyObject[],\n  start: number,\n  count: number\n) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array<{r: unknown}>(count);\n  let i: number, ilen: number, index: number, item: AnyObject;\n\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n", "import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n  firstPoint: SplinePoint,\n  middlePoint: SplinePoint,\n  afterPoint: SplinePoint,\n  t: number\n): {\n    previous: SplinePoint\n    next: SplinePoint\n  } {\n  // Props to Rob Spencer at scaled innovation for his post on splining between points\n  // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n  // This function must also respect \"skipped\" points\n\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n\n  // If all points are the same, s01 & s02 will be inf\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n\n  const fa = t * s01; // scaling factor for triangle Ta\n  const fb = t * s12;\n\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n  const pointsLen = points.length;\n\n  let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK: number[] = Array(pointsLen).fill(0);\n  const mK: number[] = Array(pointsLen);\n\n  // Calculate slopes (deltaK) and initialize tangents (mK)\n  let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n      // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n        : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n          : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n\n  monotoneAdjust(points, deltaK, mK);\n\n  monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n  return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n  points: SplinePoint[],\n  options,\n  area: ChartArea,\n  loop: boolean,\n  indexAxis: 'x' | 'y'\n) {\n  let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n  // Only consider points that are drawn in case the spanGaps option is used\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n", "import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = (parent as ShadowRoot).host;\n  }\n  return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n  let valueInPixels: number;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n\n    if (styleValue.indexOf('%') !== -1) {\n      // percentage * size in dimension\n      valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n\n  return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n  element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n  return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n  const result = {} as ChartArea;\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n  (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n  e: Event | TouchEvent | MouseEvent,\n  canvas: HTMLCanvasElement\n): {\n    x: number;\n    y: number;\n    box: boolean;\n  } {\n  const touches = (e as TouchEvent).touches;\n  const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n  const {offsetX, offsetY} = source as MouseEvent;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n  event: Event | ChartEvent | TouchEvent | MouseEvent,\n  chart: Chart | PrivateChart\n): { x: number; y: number } {\n  if ('native' in event) {\n    return event;\n  }\n\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(event, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n  let maxWidth: number, maxHeight: number;\n\n  if (width === undefined || height === undefined) {\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect(); // this is the border box of the container\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n  canvas: HTMLCanvasElement,\n  bbWidth?: number,\n  bbHeight?: number,\n  aspectRatio?: number\n): { width: number; height: number } {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    // https://github.com/chartjs/Chart.js/issues/4659\n    // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n    height = round1(width / 2);\n  }\n\n  const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n    height = containerSize.height;\n    width = round1(Math.floor(height * aspectRatio));\n  }\n\n  return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n  chart: Chart | PrivateChart,\n  forceRatio: number,\n  forceStyle?: boolean\n): boolean | void {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n  (chart as PrivateChart).height = Math.floor(chart.height);\n  (chart as PrivateChart).width = Math.floor(chart.width);\n\n  const canvas = chart.canvas;\n\n  // If no style has been set on the canvas, the render size is used as display size,\n  // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n  // See https://github.com/chartjs/Chart.js/issues/3575\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() { // This function will be called when the browser attempts to access the passive property.\n        passiveSupported = true;\n        return false;\n      }\n    } as EventListenerOptions;\n\n    if (_isDomSupported()) {\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    }\n  } catch (e) {\n    // continue regardless of error\n  }\n  return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n  element: HTMLElement,\n  property: 'width' | 'height'\n): number | undefined {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n", "import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n  p1: Point,\n  p2: Point,\n  t: number, mode: 'middle' | 'after' | unknown\n) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n      : mode === 'after' ? t < 1 ? p1.y : p2.y\n        : t > 0 ? p2.y : p1.y\n  };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n", "export interface RTLAdapter {\n  x(x: number): number;\n  setWidth(w: number): void;\n  textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n  xPlus(x: number, value: number): number;\n  leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) { // eslint-disable-line no-unused-vars\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n      return x;\n    },\n  };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n  let style: CSSStyleDeclaration, original: [string, string];\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n\n    style.setProperty('direction', direction, 'important');\n    (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n  }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n  if (original !== undefined) {\n    delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n", "import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\n\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  // eslint-disable-next-line prefer-const\n  let {start, end, loop} = segment;\n  let i, ilen;\n\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n\n    if (point.skip) {\n      continue;\n    }\n\n    value = normalize(point[property]);\n\n    if (value === prevValue) {\n      continue;\n    }\n\n    inside = between(value, startBound, endBound);\n\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n\n  return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n\n  if (loop && !spanGaps) {\n    // loop and not spanning gaps, first find a gap to start from\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n\n  // find first non skipped point (after the first gap possibly)\n  while (start < count && points[start].skip) {\n    start++;\n  }\n\n  // if we looped to count, start needs to be 0\n  start %= count;\n\n  if (loop) {\n    // loop will go past count, if start > 0\n    end += start;\n  }\n\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n\n  // end could be more than count, normalize\n  end %= count;\n\n  return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        // @ts-ignore\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n\n  return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n\n  if (!count) {\n    return [];\n  }\n\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    // Style can not start/end on a skipped point, adjust indices accordingly\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n\n  return result;\n}\n\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\n\nfunction styleChanged(style, prevStyle) {\n  if (!prevStyle) {\n    return false;\n  }\n  const cache = [];\n  const replacer = function(key, value) {\n    if (!isPatternOrGradient(value)) {\n      return value;\n    }\n    if (!cache.includes(value)) {\n      cache.push(value);\n    }\n    return cache.indexOf(value);\n  };\n  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n", "import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n  return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n  const {xScale, yScale} = meta;\n  if (xScale && yScale) {\n    return {\n      left: getSizeForArea(xScale, chartArea, 'left'),\n      right: getSizeForArea(xScale, chartArea, 'right'),\n      top: getSizeForArea(yScale, chartArea, 'top'),\n      bottom: getSizeForArea(yScale, chartArea, 'bottom')\n    };\n  }\n  return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n  const clip = meta._clip;\n  if (clip.disabled) {\n    return false;\n  }\n  const area = getDatasetArea(meta, chart.chartArea);\n\n  return {\n    left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n    right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n    top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n    bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n  };\n}\n", "import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n\n  /**\n\t * @private\n\t */\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _update(date = Date.now()) {\n    let remaining = 0;\n\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n\n      for (; i >= 0; --i) {\n        item = items[i];\n\n        if (item._active) {\n          if (item._total > anims.duration) {\n            // if the animation has been updated and its duration prolonged,\n            // update to total duration of current animations run (for progress event)\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          // Remove the item by replacing it with last item and removing the last\n          // A lot faster than splice.\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n\n      remaining += items.length;\n    });\n\n    this._lastDate = date;\n\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n\n  /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n\n  /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n\n  /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n\n  /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n", "import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  /**\n   * @param {string} from\n   * @param {string} to\n   * @param {number} factor\n   */\n  color(from, to, factor) {\n    const c0 = helpersColor(from || transparent);\n    const c1 = c0.valid && helpersColor(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\n\nexport default class Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n\n  active() {\n    return this._active;\n  }\n\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n\n  cancel() {\n    if (this._active) {\n      // update current evaluated value, for smoother animations\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n\n    this._active = from !== to && (loop || (elapsed < duration));\n\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n    this._target[prop] = this._fn(from, to, factor);\n  }\n\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n", "import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n\n    const animationOptions = Object.keys(defaults.animation);\n    const animatedProps = this._properties;\n\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n\n  /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      // Going to shared options:\n      // After all animations are done, assign the shared options object to the element\n      // So any new updates to the shared options are observed\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n        // rejected, noop\n      });\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @private\n\t */\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n\n      if (animation) {\n        if (cfg && animation.active()) {\n          // There is an existing active animation, let's update that\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        // not animated, set directly to new value\n        target[prop] = value;\n        continue;\n      }\n\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n\n\n  /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n  update(target, values) {\n    if (this._properties.size === 0) {\n      // Nothing is animated, just apply the new values.\n      Object.assign(target, values);\n      return;\n    }\n\n    const animations = this._createAnimations(target, values);\n\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\n\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  // @ts-ignore\n  return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    // Going from shared options to distinct one:\n    // Create new options object containing the old shared values and start updating that.\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n", "import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\n\nfunction toClip(value) {\n  let t, r, b, l;\n\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n\n  if (value === null) {\n    return;\n  }\n\n  let found = false;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      found = true;\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n\n  if (!found && !options.all) {\n    return 0;\n  }\n\n  return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n  const {iScale, vScale} = meta;\n  const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n  const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      [iAxisKey]: key,\n      [vAxisKey]: data[key]\n    };\n  }\n  return adata;\n}\n\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n\n  return null;\n}\n\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n    const visualValues = stack._visualValues || (stack._visualValues = {});\n    visualValues[datasetIndex] = value;\n  }\n}\n\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\n\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\n\nfunction clearStacks(meta, items) {\n  // Not using meta.index here, because it might be already updated if the dataset changed location\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n    if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n      delete stacks[axis]._visualValues[datasetIndex];\n    }\n  }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n  /**\n   * @type {any}\n   */\n  static defaults = {};\n\n  /**\n   * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n   */\n  static datasetElementType = null;\n\n  /**\n   * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n   */\n  static dataElementType = null;\n\n  /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    /** @type {boolean | object} */\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.datasetElementType = new.target.datasetElementType;\n    this.dataElementType = new.target.dataElementType;\n\n    this.initialize();\n  }\n\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n\n    if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n      console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n    }\n  }\n\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n\n  /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n\n  /**\n\t * @private\n\t */\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n\n  reset() {\n    this._update('reset');\n  }\n\n  /**\n\t * @private\n\t */\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n\n    // In order to correctly handle data addition/deletion animation (and thus simulate\n    // real-time charts), we need to monitor these data modifications and synchronize\n    // the internal metadata accordingly.\n\n    if (isObject(data)) {\n      const meta = this._cachedMeta;\n      this._data = convertObjectDataToArray(data, meta);\n    } else if (_data !== data) {\n      if (_data) {\n        // This case happens when the user replaced the data array instance.\n        unlistenArrayEvents(_data, this);\n        // Discard old parsed data and stacks\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n\n  addElements() {\n    const meta = this._cachedMeta;\n\n    this._dataCheck();\n\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n\n    this._dataCheck();\n\n    // make sure cached _stacked status is current\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n\n    // detect change in stack option\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      // remove values from old stack\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n\n    // Re-sync meta data in case the user replaced the data array or if we missed\n    // any updates and so make sure that we handle number of datapoints changing.\n    this._resyncElements(resetNewElements);\n\n    // if stack changed, update stack values for the whole dataset\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n      meta._stacked = isStacked(meta.vScale, meta);\n    }\n  }\n\n  /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n\n  /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]._visualValues\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        // if the data is sorted, we don't need to check further from this end of array\n        break;\n      }\n    }\n    if (sorted) {\n      // in the sorted case, find first non-skipped value from other end of array\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return false;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {} // eslint-disable-line no-unused-vars\n\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n\n  /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n\n  /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    // context is provided as a function, and is called only if needed,\n    // so we don't create a context for each element if not needed.\n    const context = () => this.getContext(index, active, mode);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n    if (values.$shared) {\n      // `$shared` indicates this set of options can be shared between multiple elements.\n      // Sharing is used to reduce number of properties to change during animation.\n      values.$shared = sharing;\n\n      // We cache options by `mode`, which can be 'active' for example. This enables us\n      // to have the 'active' element options and 'default' options to switch between\n      // when interacting.\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n\n    return values;\n  }\n\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n\n  /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n\n  /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n\n  /**\n   * @todo v4, rename to getSharedOptions and remove excess functions\n   */\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n\n  /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n\n  /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      // When going from active to inactive, we need to update to the shared options.\n      // This way the once hovered element will end up with the same original shared options instance, after animation.\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n\n  /**\n\t * @private\n\t */\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n\n    // Apply changes detected through array listeners\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n\n    if (count) {\n      // TODO: It is not optimal to always parse the old data\n      // This is done because we are not detecting direct assignments:\n      // chart.data.datasets[0].data[5] = 10;\n      // chart.data.datasets[0].data[5].y = 10;\n      this.parse(0, count);\n    }\n\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n\n  updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @private\n\t */\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n\n  /**\n\t * @private\n   */\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {\n  _arrayUnique, isArray, isNullOrUndef,\n  valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      // Ignore truncated pixels\n      return;\n    }\n    if (defined(prev)) {\n      // curr - prev === 0 is ignored\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n\n  return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    // When bar thickness is enforced, category and bar percentages are ignored.\n    // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n    // and deprecate barPercentage since this value is ignored when thickness is absolute.\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n\n  if (prev === null) {\n    // first data: its size is double based on the next point or,\n    // if it's also the last data, we use the scale size.\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n\n  if (next === null) {\n    // last data: its size is also double based on the previous point.\n    next = curr + curr - prev;\n  }\n\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n\n  // Store `barEnd` (furthest away from origin) as parsed value,\n  // to make stacking straight forward\n  item[vScale.axis] = barEnd;\n\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\n\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\n\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'bar',\n\n    categoryPercentage: 0.8,\n    barPercentage: 0.9,\n    grouped: true,\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'base', 'width', 'height']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n        offset: true,\n        grid: {\n          offset: true\n        }\n      },\n      _value_: {\n        type: 'linear',\n        beginAtZero: true,\n      }\n    }\n  };\n\n\n  /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      // float bar: only one end of the bar is considered by `super`\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n\n  initialize() {\n    this.enableOptionSharing = true;\n\n    super.initialize();\n\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n\n  /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n    const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n    const skipNull = (meta) => {\n      const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n      const val = parsed && parsed[meta.vScale.axis];\n\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n\n      // stacked   | meta.stack\n      //           | found | not found | undefined\n      // false     |   x   |     x     |     x\n      // true      |       |     x     |\n      // undefined |       |     x     |     x\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n\n    // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n    // stack where possible invisible bars will be located.\n    // https://github.com/chartjs/Chart.js/issues/6368\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n\n    return stacks;\n  }\n\n  /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n\n  _getAxisCount() {\n    return this._getAxis().length;\n  }\n\n  getFirstScaleIdForIndexAxis() {\n    const scales = this.chart.scales;\n    const indexScaleId = this.chart.options.indexAxis;\n    return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n  }\n\n  _getAxis() {\n    const axis = {};\n    const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n    for (const dataset of this.chart.data.datasets) {\n      axis[valueOrDefault(\n        this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n      )] = true;\n    }\n    return Object.keys(axis);\n  }\n\n  /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n   * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1; // indexOf returns -1 if element is not present\n\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      // bar thickness ratio used for non-grouped bars\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n\n  /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      // bars crossing origin are not stacked\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      // When not visible, no height\n      head = base;\n    }\n\n    size = head - base;\n\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n\n      if (_stacked && !floating) {\n        // visual data coordinates after applying minBarLength\n        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n      }\n    }\n\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    const axisCount = this._getAxisCount();\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n      const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n      const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      // For non-grouped bar charts, exact pixel values are used\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n\n\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n  static id = 'bubble';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'borderWidth', 'radius']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n\n  update(mode) {\n    const points = this._cachedMeta.data;\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n\n    // In case values were cached (and thus frozen), we need to clone the values\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n\n    // Custom radius resolution\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n    return values;\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n  static id = 'doughnut';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'arc',\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n      },\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutout: '50%',\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%',\n\n    // Spacing between arcs\n    spacing: 0,\n\n    indexAxis: 'r',\n  };\n\n  static descriptors = {\n    _scriptable: (name) => name !== 'spacing',\n    _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    // Need to override these to give a nice default\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n\n  linkScales() {}\n\n  /**\n\t * Override data parsing, since we are not using scales\n\t */\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n\n  /**\n\t * @private\n\t */\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n\n  /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n\n    // Compute the maximal rotation & circumference limits.\n    // If we only consider our dataset, this can cause problems when two datasets\n    // are both less than a circle with different rotations (starting angles)\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n\n    meta.total = this.calculateTotal();\n\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @private\n   */\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n\n    return total;\n  }\n\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n\n    if (!arcs) {\n      // Find the outmost visible dataset\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n\n    if (!arcs) {\n      return 0;\n    }\n\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n\n  getMaxOffset(arcs) {\n    let max = 0;\n\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n\n  /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n\n    return ringWeightOffset;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n\n  /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n\n    showLine: true,\n    spanGaps: false,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n      },\n      _value_: {\n        type: 'linear',\n      },\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    // Update Line\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    const end = start + count;\n    const pointsCount = points.length;\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = 0; i < pointsCount; ++i) {\n      const point = points[i];\n      const properties = directUpdate ? point : {};\n\n      if (i < start || i >= end) {\n        properties.skip = true;\n        continue;\n      }\n\n      const parsed = this.getParsed(i);\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n  static id = 'polarArea';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    dataElementType: 'arc',\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n      },\n    },\n    indexAxis: 'r',\n    startAngle: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    },\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n        angleLines: {\n          display: false\n        },\n        beginAtZero: true,\n        grid: {\n          circular: true\n        },\n        pointLabels: {\n          display: false\n        },\n        startAngle: 0\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @protected\n   */\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n\n    return range;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n\n    const defaultAngle = 360 / this.countVisibleElements();\n\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n\n    return count;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\n", "import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n  static id = 'pie';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    // The percentage of the chart that we cut out of the middle.\n    cutout: 0,\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%'\n  };\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n  static id = 'radar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n    indexAxis: 'r',\n    showLine: true,\n    elements: {\n      line: {\n        fill: 'start'\n      }\n    },\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n\n    // Update Line\n    line.points = points;\n    // In resize mode only point locations change, so no need to set the points or options.\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n\n      this.updateElement(line, undefined, properties, mode);\n    }\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n  static id = 'scatter';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n    showLine: false,\n    fill: false\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n\n    interaction: {\n      mode: 'point'\n    },\n\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + ')'\n    };\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    if (this.options.showLine) {\n\n      // https://github.com/chartjs/Chart.js/issues/11333\n      if (!this.datasetElementType) {\n        this.addElements();\n      }\n      const {dataset: line, _dataset} = meta;\n\n      // Update Line\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    } else if (this.datasetElementType) {\n      // https://github.com/chartjs/Chart.js/issues/11333\n      delete meta.dataset;\n      this.datasetElementType = false;\n    }\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  addElements() {\n    const {showLine} = this.options;\n\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = this.chart.registry.getElement('line');\n    }\n\n    super.addElements();\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n\n    if (!data.length) {\n      return border;\n    }\n\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\n", "/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n  readonly options: T;\n  /**\n   * Will called with chart options after adapter creation.\n   */\n  init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n  /**\n   * Returns a map of time formats for the supported formatting units defined\n   * in Unit as well as 'datetime' representing a detailed date/time string.\n   */\n  formats(this: DateAdapter<T>): Record<TimeUnit | 'datetime', string>;\n  /**\n   * Parses the given `value` and return the associated timestamp.\n   * @param value - the value to parse (usually comes from the data)\n   * @param [format] - the expected data format\n   */\n  parse(this: DateAdapter<T>, value: unknown, format?: string): number | null;\n  /**\n   * Returns the formatted date in the specified `format` for a given `timestamp`.\n   * @param timestamp - the timestamp to format\n   * @param format - the date/time token\n   */\n  format(this: DateAdapter<T>, timestamp: number, format: string): string;\n  /**\n   * Adds the specified `amount` of `unit` to the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param amount - the amount to add\n   * @param unit - the unit as string\n   */\n  add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n  /**\n   * Returns the number of `unit` between the given timestamps.\n   * @param a - the input timestamp (reference)\n   * @param b - the timestamp to subtract\n   * @param unit - the unit as string\n   */\n  diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n  /**\n   * Returns start of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   * @param [weekday] - the ISO day of the week with 1 being Monday\n   * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n   */\n  startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n  /**\n   * Returns end of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   */\n  endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract<T = void>(): T {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n  /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */\n  static override<T extends AnyObject = AnyObject>(\n    members: Partial<Omit<DateAdapter<T>, 'options'>>\n  ) {\n    Object.assign(DateAdapterBase.prototype, members);\n  }\n\n  readonly options: AnyObject;\n\n  constructor(options?: AnyObject) {\n    this.options = options || {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  init() {}\n\n  formats(): Record<TimeUnit | 'datetime', string> {\n    return abstract();\n  }\n\n  parse(): number | null {\n    return abstract();\n  }\n\n  format(): string {\n    return abstract();\n  }\n\n  add(): number {\n    return abstract();\n  }\n\n  diff(): number {\n    return abstract();\n  }\n\n  startOf(): number {\n    return abstract();\n  }\n\n  endOf(): number {\n    return abstract();\n  }\n}\n\nexport default {\n  _date: DateAdapterBase as {\n    new (options?: AnyObject): DateAdapter;\n    override<T extends AnyObject = AnyObject>(\n      members: Partial<Omit<DateAdapter<T>, 'options'>>\n    ): void;\n  }\n};\n", "import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      const result = lookupMethod(data, axis, value);\n      if (spanGaps) {\n        const {vScale} = controller._cachedMeta;\n        const {_parsed} = metaset;\n\n        const distanceToDefinedLo = (_parsed\n          .slice(0, result.lo + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.lo -= Math.max(0, distanceToDefinedLo);\n\n        const distanceToDefinedHi = (_parsed\n          .slice(result.hi)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.hi += Math.max(0, distanceToDefinedHi);\n      }\n      return result;\n    } else if (controller._sharedOptions) {\n      // _sharedOptions indicates that each element has equal options -> equal proportions\n      // So we can do a ranged binary search based on the range of first element and\n      // be confident to get the full range of indices that can intersect with the value.\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  // Default to all elements, when binary search can not be used.\n  return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      // Can have multiple items at the same distance in which case we sort by size\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n\n  // If we want to trigger on an intersect and we don't have any items\n  // that intersect the position, return nothing\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n  // Part of the public API to facilitate developers creating their own modes\n  evaluateInteractionItems,\n\n  // Helper function for different modes\n  modes: {\n    /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      // Default axis for index mode is 'x' to match old behaviour\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n\n      if (!items.length) {\n        return [];\n      }\n\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n\n        // don't count items that are skipped (null data)\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n\n      return elements;\n    },\n\n    /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n\n      return items;\n    },\n\n    /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n\n    /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n", "import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\n\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n\n  // dynamically placed boxes size is not considered\n  if (!isObject(pos)) {\n    if (layout.size) {\n      // this layout was already counted for, lets first reduce old size\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n\n  // return booleans on the changes per direction\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n    // Dimensions changed and there were non full width boxes before this\n    // -> we have to refit those\n    refit |= same && refitBoxes.length;\n\n    // Chart area changed in the opposite direction\n    changed = changed || other;\n\n    if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n      refitBoxes.push(layout);\n    }\n  }\n\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n\n  chartArea.x = x;\n  chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] -  Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n  /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n\n    // initialize item with default values\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    // @ts-ignore\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n\n    chart.boxes.push(item);\n  },\n\n  /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n\n  /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n\n  /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n   * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n\n    // Before any changes are made, notify boxes that an update is about to being\n    // This is used to clear any cached data (e.g. scale limits)\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n\n    // Essentially we now have any number of boxes on each of the 4 sides.\n    // Our canvas looks like the following.\n    // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n    // B1 is the bottom axis\n    // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n    // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n    // an error will be thrown.\n    //\n    // |----------------------------------------------------|\n    // |                  T1 (Full Width)                   |\n    // |----------------------------------------------------|\n    // |    |    |                 T2                  |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    | C1 |                           | C2 |    |\n    // |    |    |----|                           |----|    |\n    // |    |    |                                     |    |\n    // | L1 | L2 |           ChartArea (C0)            | R1 |\n    // |    |    |                                     |    |\n    // |    |    |----|                           |----|    |\n    // |    |    | C3 |                           | C4 |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    |                 B1                  |    |\n    // |----------------------------------------------------|\n    // |                  B2 (Full Width)                   |\n    // |----------------------------------------------------|\n    //\n\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n    // First fit the fullSize boxes, to reduce probability of re-fitting.\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n    // Then fit vertical boxes\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n    // Then fit horizontal boxes\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      // if the area changed, re-fit vertical boxes\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n\n    handleMaxPadding(chartArea);\n\n    // Finally place the boxes to correct coordinates\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n    // Move to opposite side of chart\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n\n    // Finally update boxes in chartArea (radial scale for example)\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n", "\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n  /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n  acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n  releaseContext(context) { // eslint-disable-line no-unused-vars\n    return false;\n  }\n\n  /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n  addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n  removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n  getDevicePixelRatio() {\n    return 1;\n  }\n\n  /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n  isAttached(canvas) { // eslint-disable-line no-unused-vars\n    return true;\n  }\n\n  /**\n   * Updates config with platform specific requirements\n   * @param {import('../core/core.config.js').default} config\n   */\n  updateConfig(config) { // eslint-disable-line no-unused-vars\n    // no-op\n  }\n}\n", "/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n", "/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n\n  // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n  // returns null or '' if no explicit value has been set to the canvas attribute.\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n\n  // Chart.js modifies some canvas values that we want to restore on destroy\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n\n  // Force canvas to display as block to avoid extra space caused by inline\n  // elements, which would interfere with the responsive resize process.\n  // https://github.com/chartjs/Chart.js/issues/2538\n  style.display = style.display || 'block';\n  // Include possible borders in the size\n  style.boxSizing = style.boxSizing || 'border-box';\n\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      // If no explicit render height and style height, let's apply the aspect ratio,\n      // which one can be specified by the user but also by charts as default option\n      // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n\n  return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n  if (node) {\n    node.addEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction removeListener(chart, type, listener) {\n  if (chart && chart.canvas) {\n    chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      // If the container size shrank during chart resize, let's assume\n      // scrollbar appeared. So we resize again with the scrollbar visible -\n      // effectively making chart smaller and the scrollbar hidden again.\n      // Because we are inside `throttled`, and currently `ticking`, scroll\n      // events are ignored during this whole 2 resize process.\n      // If we assumed wrong and something else happened, we are resizing\n      // twice in a frame (potential performance issue)\n      listener();\n    }\n  }, window);\n\n  // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    // When its container's display is set to 'none' the callback will be called with a\n    // size of (0, 0), which will cause the chart to lose its original height, so skip\n    // resizing in such case.\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n\n  return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    // This case can occur if the chart is destroyed while waiting\n    // for the throttled function to occur. We prevent crashes by checking\n    // for a destroyed chart\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart);\n\n  addListener(canvas, type, proxy);\n\n  return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n  acquireContext(canvas, aspectRatio) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n    // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n    // inside an iframe or when running in a protected environment. We could guess the\n    // types from their toString() value but let's keep things flexible and assume it's\n    // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n    // https://github.com/chartjs/Chart.js/issues/3887\n    // https://github.com/chartjs/Chart.js/issues/4102\n    // https://github.com/chartjs/Chart.js/issues/4152\n    if (context && context.canvas === canvas) {\n      // Load platform resources on first chart creation, to make it possible to\n      // import the library before setting platform options.\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n\n    return null;\n  }\n\n  /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n\n    // The canvas render size might have been changed (and thus the state stack discarded),\n    // we can't use save() and restore() to restore the initial state. So make sure that at\n    // least the canvas context is reset to the default state by setting the canvas width.\n    // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n    // eslint-disable-next-line no-self-assign\n    canvas.width = canvas.width;\n\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n\n  /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n  addEventListener(chart, type, listener) {\n    // Can have only one listener per type, so make sure previous is removed\n    this.removeEventListener(chart, type);\n\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n\n    if (!proxy) {\n      return;\n    }\n\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n  isAttached(canvas) {\n    const container = canvas && _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n", "import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n", "import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n  static defaults = {};\n  static defaultRoutes = undefined;\n\n  x: number;\n  y: number;\n  active = false;\n  options: O;\n  $animations: Record<keyof T, Animation>;\n\n  tooltipPosition(useFinalPosition: boolean): Point {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y} as Point;\n  }\n\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n\n  /**\n   * Gets the current or final value of each prop. Can return extra properties (whole object).\n   * @param props - properties to get\n   * @param [final] - get the final value (animation target)\n   */\n  getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n  getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n  getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      // let's not create an object, if not needed\n      return this as Record<string, unknown>;\n    }\n    const ret: Record<string, unknown> = {};\n    props.forEach((prop) => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n    });\n    return ret;\n  }\n}\n", "import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const determinedMaxTicks = determineMaxTicks(scale);\n  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n\n  // If there are too many major ticks to display them all\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n\n  // If the major ticks are evenly spaced apart, place the minor ticks\n  // so that they divide the major ticks into even chunks\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n\n  next = start;\n\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n\n  if (len < 2) {\n    return false;\n  }\n\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n", "import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n\n    // Return undefined if the pixel is out of the range\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n\n  return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\n\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\n\nfunction titleAlign(align, position, reverse) {\n  /** @type {CanvasTextAlign} */\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n  // eslint-disable-next-line max-statements\n  constructor(cfg) {\n    super();\n\n    /** @type {string} */\n    this.id = cfg.id;\n    /** @type {string} */\n    this.type = cfg.type;\n    /** @type {any} */\n    this.options = undefined;\n    /** @type {CanvasRenderingContext2D} */\n    this.ctx = cfg.ctx;\n    /** @type {Chart} */\n    this.chart = cfg.chart;\n\n    // implements box\n    /** @type {number} */\n    this.top = undefined;\n    /** @type {number} */\n    this.bottom = undefined;\n    /** @type {number} */\n    this.left = undefined;\n    /** @type {number} */\n    this.right = undefined;\n    /** @type {number} */\n    this.width = undefined;\n    /** @type {number} */\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    /** @type {number} */\n    this.maxWidth = undefined;\n    /** @type {number} */\n    this.maxHeight = undefined;\n    /** @type {number} */\n    this.paddingTop = undefined;\n    /** @type {number} */\n    this.paddingBottom = undefined;\n    /** @type {number} */\n    this.paddingLeft = undefined;\n    /** @type {number} */\n    this.paddingRight = undefined;\n\n    // scale-specific properties\n    /** @type {string=} */\n    this.axis = undefined;\n    /** @type {number=} */\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    /** @type {Tick[]} */\n    this.ticks = [];\n    /** @type {object[]|null} */\n    this._gridLineItems = null;\n    /** @type {object[]|null} */\n    this._labelItems = null;\n    /** @type {object|null} */\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    /** @type {number} */\n    this._startPixel = undefined;\n    /** @type {number} */\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n  init(options) {\n    this.options = options.setContext(this.getContext());\n\n    this.axis = options.axis;\n\n    // parse min/max value, so we can properly determine min/max for other scales\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n\n  /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    return raw;\n  }\n\n  /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isFinite(_userMin),\n      maxDefined: isFinite(_userMax)\n    };\n  }\n\n  /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n\n    // Make sure min <= max when only min or max is defined by user and the data is outside that range\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n\n  /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n\n  /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n  getTicks() {\n    return this.ticks;\n  }\n\n  /**\n\t * @return {string[]}\n\t */\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n\n  /**\n   * @return {import('../types.js').LabelItem[]}\n   */\n  getLabelItems(chartArea = this.chart.chartArea) {\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    return items;\n  }\n\n  // When a new layout is created, reset the data limits cache\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n\n  // These methods are ordered by lifecycle. Utilities then follow.\n  // Any function defined here is inherited by all scale types.\n  // Any function can be extended by the scale type\n\n  beforeUpdate() {\n    call(this.options.beforeUpdate, [this]);\n  }\n\n  /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t *   This space comes from two sources:\n\t *     - padding - space that's required to show the labels at the edges of the scale\n\t *     - thickness of scales or legends in another orientation\n\t */\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n\n    // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n    this.beforeUpdate();\n\n    // Absorb the master measurements\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n\n    // Dimensions\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n\n    // Data min/max\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n\n    this.beforeBuildTicks();\n\n    this.ticks = this.buildTicks() || [];\n\n    // Allow modification of ticks in callback.\n    this.afterBuildTicks();\n\n    // Compute tick rotation and fit using a sampled subset of labels\n    // We generally don't need to compute the size of every single label for determining scale size\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n    // configure is called twice, once here, once from core.controller.updateLayout.\n    // Here we haven't been positioned yet, but dimensions are correct.\n    // Variables set in configure are needed for calculateLabelRotation, and\n    // it's ok that coordinates are not correct there, only dimensions matter.\n    this.configure();\n\n    // Tick Rotation\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n    this.afterCalculateLabelRotation();\n\n    // Auto-skip\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n\n    if (samplingEnabled) {\n      // Generate labels using all non-skipped ticks\n      this._convertTicksToLabels(this.ticks);\n    }\n\n    this.beforeFit();\n    this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n    this.afterFit();\n\n    // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n    this.afterUpdate();\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      // by default vertical scales are from bottom to top, so pixels are reversed\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n\n  afterUpdate() {\n    call(this.options.afterUpdate, [this]);\n  }\n\n  //\n\n  beforeSetDimensions() {\n    call(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    if (this.isHorizontal()) {\n      // Reset position before calculating rotation\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n\n      // Reset position before calculating rotation\n      this.top = 0;\n      this.bottom = this.height;\n    }\n\n    // Reset padding\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    call(this.options.afterSetDimensions, [this]);\n  }\n\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    call(this.options[name], [this]);\n  }\n\n  // Data limits\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n\n  //\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  /**\n\t * @return {object[]} the ticks\n\t */\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n\n  beforeTickToLabelConversion() {\n    call(this.options.beforeTickToLabelConversion, [this]);\n  }\n  /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    call(this.options.afterTickToLabelConversion, [this]);\n  }\n\n  //\n\n  beforeCalculateLabelRotation() {\n    call(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n\n    // Estimate the width of each grid based on the canvas width, the maximum\n    // label width and the number of tick intervals\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n    // Allow 3 pixels x2 padding either side for label readability\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    call(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n\n  //\n\n  beforeFit() {\n    call(this.options.beforeFit, [this]);\n  }\n  fit() {\n    // Reset\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight; // fill all the height\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n\n      // Don't bother fitting the ticks if we are not showing the labels\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n\n        if (isHorizontal) {\n        // A horizontal axis is more constrained by the height.\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n        // A vertical axis is more constrained by the width. Labels are the\n        // dominant factor here, so get that length first and account for padding\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n\n    this._handleMargins();\n\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n\n      // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n      // which means that the right padding is dominated by the font height\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n\n      // Adjust padding taking into account changes in offsets\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n\n  /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n\n  afterFit() {\n    call(this.options.afterFit, [this]);\n  }\n\n  // Shared Methods\n  /**\n\t * @return {boolean}\n\t */\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  /**\n\t * @return {boolean}\n\t */\n  isFullSize() {\n    return this.options.fullSize;\n  }\n\n  /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n\n    this.generateTickLabels(ticks);\n\n    // Ticks should be skipped when callback returns null or undef, so lets remove those.\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n\n    this.afterTickToLabelConversion();\n  }\n\n  /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n    }\n\n    return labelSizes;\n  }\n\n  /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _computeLabelSizes(ticks, length, maxTicksLimit) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n    for (i = 0; i < length; i += increment) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      // Undefined labels and arrays should not be measured\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        // if it is an array let's measure each element\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = /** @type {string} */ (label[j]);\n          // Undefined labels and arrays should not be measured\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n\n  /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value;\n  }\n\n  /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n  getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n    return NaN;\n  }\n\n  /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n  getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n\n  /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n\n  /**\n\t * @return {number}\n\t */\n  getBaseValue() {\n    const {min, max} = this;\n\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index) {\n    const ticks = this.ticks || [];\n\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n\n  /**\n\t * @return {number}\n\t * @private\n\t */\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n\n    // Calculate space needed by label in axis direction.\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n    // Calculate space needed for 1 tick in axis direction.\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n\n  /**\n\t * @return {boolean}\n\t * @private\n\t */\n  _isVisible() {\n    const display = this.options.display;\n\n    if (display !== 'auto') {\n      return !!display;\n    }\n\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position, border} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = borderOpts.display ? borderOpts.width : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const context = this.getContext(i);\n      const optsAtIndex = grid.setContext(context);\n      const optsAtIndexBorder = border.setContext(context);\n\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndexBorder.dash || [];\n      const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n      lineValue = getPixelForGridLine(this, i, offset);\n\n      // Skip if the pixel is out of the range\n      if (lineValue === undefined) {\n        continue;\n      }\n\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n\n    return items;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n\n      if (isHorizontal) {\n        x = pixel;\n\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n          x += (lineHeight / 2) * Math.sin(rotation);\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n\n      let backdrop;\n\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n\n        let top = textOffset - labelPadding.top;\n        let left = 0 - labelPadding.left;\n\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        default:\n          break;\n        }\n\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        case 'inner':\n          if (i === ilen - 1) {\n            left -= width;\n          } else if (i > 0) {\n            left -= width / 2;\n          }\n          break;\n        default:\n          break;\n        }\n\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n\n          color: optsAtIndex.backdropColor,\n        };\n      }\n\n      items.push({\n        label,\n        font,\n        textOffset,\n        options: {\n          rotation,\n          color,\n          strokeColor,\n          strokeWidth,\n          textAlign: tickTextAlign,\n          textBaseline,\n          translation: [x, y],\n          backdrop,\n        }\n      });\n    }\n\n    return items;\n  }\n\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n\n    let align = 'center';\n\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n\n    return align;\n  }\n\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n\n    let textAlign;\n    let x;\n\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n\n    return {textAlign, x};\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n\n    const chart = this.chart;\n    const position = this.options.position;\n\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n\n  /**\n   * @protected\n   */\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {\n    const {chart, ctx, options: {border, grid}} = this;\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = border.display ? borderOpts.width : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.width;\n    ctx.strokeStyle = borderOpts.color;\n\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n\n    if (!optionTicks.display) {\n      return;\n    }\n\n    const ctx = this.ctx;\n\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n\n    const items = this.getLabelItems(chartArea);\n    for (const item of items) {\n      const renderTextOptions = item.options;\n      const tickFont = item.font;\n      const label = item.label;\n      const y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n    }\n\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n\n    if (!title.display) {\n      return;\n    }\n\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n\n  /**\n\t * @return {object[]}\n\t * @private\n\t */\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      // backward compatibility: draw has been overridden by custom scale\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: bz,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n\n  /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n\n  /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n\n  /**\n   * @protected\n   */\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n", "import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n\n    if (isIChartComponent(proto)) {\n      // Make sure the parent is registered and note the scope where its defaults are.\n      parentScope = this.register(proto);\n    }\n\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n\n    if (id in items) {\n      // already registered\n      return scope;\n    }\n\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n\n    return scope;\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n  get(id) {\n    return this.items[id];\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t */\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n\n    if (id in items) {\n      delete items[id];\n    }\n\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n  // Inherit the parent's defaults and keep existing defaults\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n\n  defaults.set(scope, itemDefaults);\n\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\n\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\n\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n", "import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    // Order is important, Scale has Element in prototype chain,\n    // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  add(...args) {\n    this._each('register', args);\n  }\n\n  remove(...args) {\n    this._each('unregister', args);\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n\n  /**\n\t * @private\n\t */\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        // Handle loopable args\n        // Use case:\n        //  import * as plugins from './plugins.js';\n        //  Chart.register(plugins);\n        each(arg, item => {\n          // If there are mixed types in the loopable, make sure those are\n          // registered in correct registry\n          // Use case: (treemap exporting controller, elements etc)\n          //  import * as treemap from 'chartjs-chart-treemap.js';\n          //  Chart.register(treemap);\n\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n    registry[method](component);\n    call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n  }\n\n  /**\n\t * @private\n\t */\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    // plugins is the fallback registry\n    return this.plugins;\n  }\n\n  /**\n\t * @private\n\t */\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n", "import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n  constructor() {\n    this._init = [];\n  }\n\n  /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n   * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callCallback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  invalidate() {\n    // When plugins are registered, there is the possibility of a double\n    // invalidate situation. In this case, we only want to invalidate once.\n    // If we invalidate multiple times, the `_oldCache` is lost and all of the\n    // plugins are restarted without being correctly stopped.\n    // See https://github.com/chartjs/Chart.js/issues/8147\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n\n    const descriptors = this._cache = this._createDescriptors(chart);\n\n    this._notifyStateChanges(chart);\n\n    return descriptors;\n  }\n\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    // options === false => all plugins are disabled\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n\n  return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n\n  return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    // make sure plugin defaults are in scopes for local (not registered) plugins\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    // These are just defaults that plugins can override\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n", "import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n  if (id === 'x' || id === 'y' || id === 'r') {\n    return id;\n  }\n}\n\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n  if (idMatchesAxis(id)) {\n    return id;\n  }\n  for (const opts of scaleOptions) {\n    const axis = opts.axis\n      || axisFromPosition(opts.position)\n      || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n    if (axis) {\n      return axis;\n    }\n  }\n  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n  if (dataset[axis + 'AxisID'] === id) {\n    return {axis};\n  }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n  if (config.data && config.data.datasets) {\n    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n    if (boundDs.length) {\n      return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n    }\n  }\n  return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const scales = Object.create(null);\n\n  // First figure out first scale id's per axis.\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n\n  // Then merge dataset defaults to scale configs\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n\n  // apply scale defaults, if not overridden by dataset defaults\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n\n  return scales;\n}\n\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\n\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n\n  initOptions(config);\n\n  return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\n\nexport default class Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n\n  get platform() {\n    return this._config.platform;\n  }\n\n  get type() {\n    return this._config.type;\n  }\n\n  set type(type) {\n    this._config.type = type;\n  }\n\n  get data() {\n    return this._config.data;\n  }\n\n  set data(data) {\n    this._config.data = initData(data);\n  }\n\n  get options() {\n    return this._config.options;\n  }\n\n  set options(options) {\n    this._config.options = options;\n  }\n\n  get plugins() {\n    return this._config.plugins;\n  }\n\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @return {string[][]}\n   */\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset animation options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @param {string} transition\n   * @return {string[][]}\n   */\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        // The following are used for looking up the `animations` and `animation` keys\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving element options that belong\n   * to an dataset. These keys do not include the dataset itself, because it\n   * is not under options.\n   * @param {string} datasetType\n   * @param {string} elementType\n   * @return {string[][]}\n   */\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving plugin options.\n   * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n   * @return {string[][]}\n   */\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n\n  /**\n   * @private\n   */\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n\n  /**\n   * Resolves the objects from options and defaults for option value resolution.\n   * @param {object} mainScope - The main scope object for options\n   * @param {string[][]} keyLists - The arrays of keys in resolution order\n   * @param {boolean} [resetCache] - reset the cache for this mainScope\n   */\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n\n    const scopes = new Set();\n\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n\n  /**\n   * Returns the option scopes for resolving chart options\n   * @return {object[]}\n   */\n  chartOptionScopes() {\n    const {options, type} = this;\n\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {string[]} names\n   * @param {function|object} context\n   * @param {string[]} [prefixes]\n   * @return {object}\n   */\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      // subResolver is passed to scriptable options. It should not resolve to hover options.\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {object} [context]\n   * @param {string[]} [prefixes]\n   * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n   */\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\n\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n", "import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\n\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n\n  chart.notifyPlugins('afterRender');\n  callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    // Support for array based queries (such as jQuery)\n    item = item[0];\n  }\n\n  if (item && item.canvas) {\n    // Support for any object associated to a canvas (including a context2d)\n    item = item.canvas;\n  }\n  return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\n\nclass Chart {\n\n  static defaults = defaults;\n  static instances = instances;\n  static overrides = overrides;\n  static registry = registry;\n  static version = version;\n  static getChart = getChart;\n\n  static register(...items) {\n    registry.add(...items);\n    invalidatePlugins();\n  }\n\n  static unregister(...items) {\n    registry.remove(...items);\n    invalidatePlugins();\n  }\n\n  // eslint-disable-next-line max-statements\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    // Store the previously used aspect ratio to determine if a resize\n    // is needed during updates. Do this after _options is set since\n    // aspectRatio uses a getter\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    /** @type {?{attach?: function, detach?: function, resize?: function}} */\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n\n    // Add the chart instance to the global namespace\n    instances[this.id] = this;\n\n    if (!context || !canvas) {\n      // The given item is not a compatible context2d element, let's return before finalizing\n      // the chart initialization but after setting basic chart / controller properties that\n      // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n      // https://github.com/chartjs/Chart.js/issues/2807\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      // If aspectRatio is defined in options, use that.\n      return aspectRatio;\n    }\n\n    if (maintainAspectRatio && _aspectRatio) {\n      // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n      return _aspectRatio;\n    }\n\n    // Calculate\n    return height ? width / height : null;\n  }\n\n  get data() {\n    return this.config.data;\n  }\n\n  set data(data) {\n    this.config.data = data;\n  }\n\n  get options() {\n    return this._options;\n  }\n\n  set options(options) {\n    this.config.options = options;\n  }\n\n  get registry() {\n    return registry;\n  }\n\n  /**\n\t * @private\n\t */\n  _initialize() {\n    // Before init plugin notification\n    this.notifyPlugins('beforeInit');\n\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n\n    this.bindEvents();\n\n    // After init plugin notification\n    this.notifyPlugins('afterInit');\n\n    return this;\n  }\n\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n\n  /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n\n    this.notifyPlugins('resize', {size: newSize});\n\n    callCallback(options.onResize, [this, newSize], this);\n\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        // The resize update is delayed, only draw without updating.\n        this.render();\n      }\n    }\n  }\n\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n\n  /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n\n      scale.init(scaleOptions, options);\n    });\n    // clear up discarded scales\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n\n  /**\n\t * @private\n\t */\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n\n    this._removeUnreferencedMetasets();\n\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n\n    this._updateMetasets();\n    return newControllers;\n  }\n\n  /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n\n  /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n\n  update(mode) {\n    const config = this.config;\n\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n\n    // plugins options references might have change, let's invalidate the cache\n    // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n    this._plugins.invalidate();\n\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    // Make sure dataset controllers are updated and new controllers are reset\n    const newControllers = this.buildOrUpdateControllers();\n\n    this.notifyPlugins('beforeElementsUpdate');\n\n    // Make sure all dataset controllers have correct meta data counts\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      // New controllers will be reset after the layout pass, so we only want to modify\n      // elements added to new datasets\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n\n    // Only reset the controllers if we have animations\n    if (!animsDisabled) {\n      // Can only reset the new controllers after the scales have been updated\n      // Reset is done to get the starting point for the initial animation\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n\n    this._updateDatasets(mode);\n\n    // Do this before render so that any plugins that need final scale updates can use it\n    this.notifyPlugins('afterUpdate', {mode});\n\n    this._layers.sort(compare2Level('z', '_idx'));\n\n    // Replay last event from before update, or set hover styles on active elements\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n\n  /**\n   * @private\n   */\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      // The configured events have changed. Rebind.\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n\n  /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n\n    layouts.update(this, this.width, this.height, minPadding);\n\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n        return;\n      }\n\n      // configure is called twice, once in core.scale.update and once here.\n      // Here the boxes are fully updated and at their final positions.\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n\n    this.notifyPlugins('afterLayout');\n  }\n\n  /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n\n  /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n\n    meta.controller._update(mode);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      // Unset pending resize request now to avoid possible recursion within _resize\n      this._resizeBeforeDraw = null;\n      this._resize(width, height);\n    }\n    this.clear();\n\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n    // currently be part of layers. Instead, we draw\n    // layers <= 0 before(default, backward compat), and the rest after\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this._drawDatasets();\n\n    // Rest of layers\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this.notifyPlugins('afterDraw');\n  }\n\n  /**\n\t * @private\n\t */\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n\n  /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n\n  /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    // @ts-expect-error\n    const clip = getDatasetClipArea(this, meta);\n\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n\n    if (clip) {\n      clipArea(ctx, clip);\n    }\n\n    meta.controller.draw();\n\n    if (clip) {\n      unclipArea(ctx);\n    }\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n\n  /**\n   * Checks whether the given point is in the chart area.\n   * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n   * @returns {boolean}\n   */\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n\n    return [];\n  }\n\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\t\t\t// See isDatasetVisible() comment\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n\n    return meta;\n  }\n\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n\n    const meta = this.getDatasetMeta(datasetIndex);\n\n    // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n    // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n\n  /**\n\t * @private\n\t */\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n\n  /**\n\t * @private\n\t */\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n\n    this._stop();\n    this.config.clearCache();\n\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n\n    delete instances[this.id];\n\n    this.notifyPlugins('afterDestroy');\n  }\n\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n\n  /**\n\t * @private\n\t */\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n\n  /**\n   * @private\n   */\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n\n    each(this.options.events, (type) => _add(type, listener));\n  }\n\n  /**\n   * @private\n   */\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n\n    let detached; // eslint-disable-line prefer-const\n    const attached = () => {\n      _remove('attach', attached);\n\n      this.attached = true;\n      this.resize();\n\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n\n    detached = () => {\n      this.attached = false;\n\n      _remove('resize', listener);\n\n      // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n      this._stop();\n      this._resize(0, 0);\n\n      _add('attach', attached);\n    };\n\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n\n  /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n\n    if (changed) {\n      this._active = active;\n      // Make sure we don't use the previous mouse event to override the active elements in update.\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n\n  /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n   * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n\n  /**\n   * Check if a plugin with the specific ID is registered and enabled\n   * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n   * @returns {boolean}\n   */\n  isPluginEnabled(pluginId) {\n    return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n\n    if (changed || args.changed) {\n      this.render();\n    }\n\n    return this;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n   * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n\n    // If the event is replayed from `update`, we should evaluate with the final positions.\n    //\n    // The `replay`:\n    // It's the last event (excluding click) that has occurred before `update`.\n    // So mouse has not moved. It's also over the chart, because there is a `replay`.\n    //\n    // The why:\n    // If animations are active, the elements haven't moved yet compared to state before update.\n    // But if they will, we are activating the elements that would be active, if this check\n    // was done after the animations have completed. => \"final positions\".\n    // If there is no animations, the \"final\" and \"current\" positions are equal.\n    // This is done so we do not have to evaluate the active elements each animation frame\n    // - it would be expensive.\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n    if (inChartArea) {\n      // Set _lastEvent to null while we are processing the event handlers.\n      // This prevents recursion if the handler calls chart.update()\n      this._lastEvent = null;\n\n      // Invoke onHover hook\n      callCallback(options.onHover, [e, active, this], this);\n\n      if (isClick) {\n        callCallback(options.onClick, [e, active, this], this);\n      }\n    }\n\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n\n    this._lastEvent = lastEvent;\n\n    return changed;\n  }\n\n  /**\n   * @param {ChartEvent} e - The event\n   * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n   * @param {boolean} inChartArea - Is the event inside chartArea\n   * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n   * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n   * @pravate\n   */\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n  return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n", "import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n  if (innerRadius > 0) {\n    const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n    ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n  } else {\n    const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n    if (borderJoinStyle === 'round') {\n      ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n    } else if (borderJoinStyle === 'bevel') {\n      const r = 2 * clipWidth * clipWidth;\n      const endX = -r * Math.cos(endAngle + PI / 2) + x;\n      const endY = -r * Math.sin(endAngle + PI / 2) + y;\n      const startX = r * Math.cos(startAngle + PI / 2) + x;\n      const startY = r * Math.sin(startAngle + PI / 2) + y;\n      ctx.lineTo(endX, endY);\n      ctx.lineTo(startX, startY);\n    }\n  }\n  ctx.closePath();\n\n  ctx.moveTo(0, 0);\n  ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n  ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n\n  // Draw an inner border by clipping the arc and drawing a double-width border\n  // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n  // Outer limits are complicated. We want to compute the available angular distance at\n  // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n  // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n  //\n  // If the borderRadius is large, that value can become negative.\n  // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n  // we know that the thickness term will dominate and compute the limits at that point\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */\nfunction pathArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  end: number,\n  circular: boolean,\n) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n  let spacingOffset = 0;\n  const alpha = end - start;\n\n  if (spacing) {\n    // When spacing is present, it is the same for all items\n    // So we adjust the start and end angle of the arc such that\n    // the distance is the same as it would be without the spacing\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n  ctx.beginPath();\n\n  if (circular) {\n    // The first arc segments from point 1 to point a to point 2\n    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n    // The corner segment from point 2 to point 3\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n\n    // The line from point 3 to point 4\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n\n    // The corner segment from point 4 to point 5\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n\n    // The inner arc from point 5 to point b to point 6\n    const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n    // The corner segment from point 6 to point 7\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n\n    // The line from point 7 to point 8\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n\n    // The corner segment from point 8 to point 1\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n\n  ctx.closePath();\n}\n\nfunction drawArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\n\nfunction drawBorder(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference, options} = element;\n  const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n  const inner = options.borderAlign === 'inner';\n\n  if (!borderWidth) {\n    return;\n  }\n\n  ctx.setLineDash(borderDash || []);\n  ctx.lineDashOffset = borderDashOffset;\n\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.stroke();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n\n  if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n    clipSelf(ctx, element, endAngle);\n  }\n\n  if (!fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.stroke();\n  }\n}\n\nexport interface ArcProps extends Point {\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number;\n  outerRadius: number;\n  circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n  static id = 'arc';\n\n  static defaults = {\n    borderAlign: 'center',\n    borderColor: '#fff',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: undefined,\n    borderRadius: 0,\n    borderWidth: 2,\n    offset: 0,\n    spacing: 0,\n    angle: undefined,\n    circular: true,\n    selfJoin: false,\n  };\n\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor'\n  };\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash'\n  };\n\n  circumference: number;\n  endAngle: number;\n  fullCircles: number;\n  innerRadius: number;\n  outerRadius: number;\n  pixelMargin: number;\n  startAngle: number;\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n    const betweenAngles = _circumference >= TAU || nonZeroBetween;\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n    return (betweenAngles && withinRadius);\n  }\n\n  getCenterPoint(useFinalPosition: boolean) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius'\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n\n  tooltipPosition(useFinalPosition: boolean) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n\n  draw(ctx: CanvasRenderingContext2D) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 4;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n\n    ctx.save();\n\n    const halfAngle = (this.startAngle + this.endAngle) / 2;\n    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n    const radiusOffset = offset * fix;\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n\n    drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n    ctx.restore();\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n\n  return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  // eslint-disable-next-line prefer-const\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n\n    prev = point;\n  }\n\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n\n  return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      // Draw line to maxY and minY, using the average x-coordinate\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      // Line to y-value of last point in group. So the line continues\n      // from correct position. Not using move, to have solid path.\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    }\n\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0; // truncated x-coordinate\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      // Draw line to next x-position, using the first (or only)\n      // y-value in that group\n      ctx.lineTo(x, y);\n\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    // Keep track of the last y-value in group\n    lastY = y;\n  }\n  drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n\n  return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\n\nexport default class LineElement extends Element {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderCapStyle: 'butt',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderWidth: 3,\n    capBezierPoints: true,\n    cubicInterpolationMode: 'default',\n    fill: false,\n    spanGaps: false,\n    stepped: false,\n    tension: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n  };\n\n\n  constructor(cfg) {\n    super();\n\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n\n  get points() {\n    return this._points;\n  }\n\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n\n  /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n\n  /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n\n  /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n\n    if (!segments.length) {\n      return;\n    }\n\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n\n  /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n\n  /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n\n    start = start || 0;\n    count = count || (this.points.length - start);\n\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n\n  /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n\n    if (points.length && options.borderWidth) {\n      ctx.save();\n\n      draw(ctx, this, start, count);\n\n      ctx.restore();\n    }\n\n    if (this.animated) {\n      // When line is animated, the control points and path are not cached.\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n  CartesianParsedData,\n  ChartArea,\n  Point,\n  PointHoverOptions,\n  PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n  static id = 'point';\n\n  parsed: CartesianParsedData;\n  skip?: boolean;\n  stop?: boolean;\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderWidth: 1,\n    hitRadius: 1,\n    hoverBorderWidth: 1,\n    hoverRadius: 4,\n    pointStyle: 'circle',\n    radius: 3,\n    rotation: 0\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n\n  inXRange(mouseX: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseX, 'x', useFinalPosition);\n  }\n\n  inYRange(mouseY: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseY, 'y', useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition?: boolean) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n\n  size(options?: Partial<PointOptions & PointHoverOptions>) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n\n  draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n    const options = this.options;\n\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n\n  getRange() {\n    const options = this.options || {};\n    // @ts-expect-error Fallbacks should never be hit in practice\n    return options.radius + options.hitRadius;\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n  let left, right, top, bottom, half;\n\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n\n  return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n\n  // If the value is an object, assume the user knows what they are doing\n  // and apply as directed.\n  const enableBorder = enableBorderRadius || isObject(value);\n\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\n\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\n\nexport default class BarElement extends Element {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderSkipped: 'start',\n    borderWidth: 0,\n    borderRadius: 0,\n    inflateAmount: 'auto',\n    pointStyle: undefined\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n    ctx.save();\n\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n\n    ctx.restore();\n  }\n\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\n", "import {DoughnutController, PolarAreaController, defaults} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n  enabled?: boolean;\n  forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n  backgroundColor?: unknown;\n  borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n  'rgb(54, 162, 235)', // blue\n  'rgb(255, 99, 132)', // red\n  'rgb(255, 159, 64)', // orange\n  'rgb(255, 205, 86)', // yellow\n  'rgb(75, 192, 192)', // green\n  'rgb(153, 102, 255)', // purple\n  'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n  return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n  return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n  dataset.borderColor = getBorderColor(i);\n  dataset.backgroundColor = getBackgroundColor(i);\n\n  return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n  return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n  return i;\n}\n\nfunction getColorizer(chart: Chart) {\n  let i = 0;\n\n  return (dataset: ChartDataset, datasetIndex: number) => {\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n    if (controller instanceof DoughnutController) {\n      i = colorizeDoughnutDataset(dataset, i);\n    } else if (controller instanceof PolarAreaController) {\n      i = colorizePolarAreaDataset(dataset, i);\n    } else if (controller) {\n      i = colorizeDefaultDataset(dataset, i);\n    }\n  };\n}\n\nfunction containsColorsDefinitions(\n  descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>\n) {\n  let k: number | string;\n\n  for (k in descriptors) {\n    if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction containsColorsDefinition(\n  descriptor: ColorsDescriptor\n) {\n  return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nfunction containsDefaultColorsDefenitions() {\n  return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\n\nexport default {\n  id: 'colors',\n\n  defaults: {\n    enabled: true,\n    forceOverride: false\n  } as ColorsPluginOptions,\n\n  beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n    if (!options.enabled) {\n      return;\n    }\n\n    const {\n      data: {datasets},\n      options: chartOptions\n    } = chart.config;\n    const {elements} = chartOptions;\n\n    const containsColorDefenition = (\n      containsColorsDefinitions(datasets) ||\n      containsColorsDefinition(chartOptions) ||\n      (elements && containsColorsDefinitions(elements)) ||\n      containsDefaultColorsDefenitions());\n\n    if (!options.forceOverride && containsColorDefenition) {\n      return;\n    }\n\n    const colorizer = getColorizer(chart);\n\n    datasets.forEach(colorizer);\n  }\n};\n", "import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  /**\n   * Implementation of the Largest Triangle Three Buckets algorithm.\n   *\n   * This implementation is based on the original implementation by Sveinn Steinarsson\n   * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n   *\n   * The original implementation is MIT licensed.\n   */\n  const samples = options.samples || availableWidth;\n  // There are less points than the threshold, returning the whole array\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n\n  const decimated = [];\n\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  // Starting from offset\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n\n  decimated[sampledIndex++] = data[a];\n\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n\n    // Adding offset\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n\n    // Adding offset\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n\n    // Note that this is changed from the original algorithm which initializes these\n    // values to 1. The reason for this change is that if the area is small, nextA\n    // would never be set and thus a crash would occur in the next loop as `a` would become\n    // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n    // initializing with a negative number is the correct solution.\n    maxArea = area = -1;\n\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n\n  // Include the last point\n  decimated[sampledIndex++] = data[endIndex];\n\n  return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      // Use point.x here because we're computing the average data `x` value\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      // Push up to 4 points, 3 for the last interval and the first point for this interval\n      const lastIndex = i - 1;\n\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        // The interval is defined by 4 points: start, min, max, end.\n        // The starting point is already considered at this point, so we need to determine which\n        // of the other points to add. We need to sort these points to ensure the decimated data\n        // is still sorted and then ensure there are no duplicates.\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n\n      // lastIndex === startIndex will occur when a range has only 1 point which could\n      // happen with very uneven data\n      if (i > 0 && lastIndex !== startIndex) {\n        // Last point in the previous interval\n        decimated.push(data[lastIndex]);\n      }\n\n      // Start of the new interval\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n\n  return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: data,\n    });\n  }\n}\n\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count;\n\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n\n  return {start, count};\n}\n\nexport default {\n  id: 'decimation',\n\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n      cleanDecimatedData(chart);\n      return;\n    }\n\n    // Assume the entire chart is available to show a few more points than needed\n    const availableWidth = chart.width;\n\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        // Decimation is only supported for lines that have an X indexAxis\n        return;\n      }\n\n      if (!meta.controller.supportsDecimation) {\n        // Only line datasets are supported\n        return;\n      }\n\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        // Only linear interpolation is supported\n        return;\n      }\n\n      if (chart.options.parsing) {\n        // Plugin only supports data that does not need parsing\n        return;\n      }\n\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        // No decimation is required until we are above this threshold\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n\n      if (isNullOrUndef(_data)) {\n        // First time we are seeing this dataset\n        // We override the 'data' property with a setter that stores the\n        // raw data in _data, but reads the decimated data from _decimated\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n\n      // Point the chart to the decimated data\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n\n      dataset._decimated = decimated;\n    });\n  },\n\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n", "import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n    if (!target.segments) {\n      // Special case for boundary not supporting `segments` (simpleArc)\n      // Bounds are provided as `target` for partial circle, or undefined for full circle\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n\n    // Get all segments from `target` that intersect the bounds of current segment of `line`\n    const targetSegments = _boundSegments(target, bounds);\n\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n\n  if (isArray(boundary)) {\n    _loop = true;\n    // @ts-ignore\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n", "import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n\n  if (!propagate) {\n    return fill;\n  }\n\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isFinite(fill)) {\n      return fill;\n    }\n\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n\n    if (target.visible) {\n      return fill;\n    }\n\n    visited.push(fill);\n    fill = target.fill;\n  }\n\n  return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n  /** @type {string | {value: number}} */\n  const fill = parseFillOption(line);\n\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n\n  let target = parseFloat(fill);\n\n  if (isFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n\n  return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n  let value;\n\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n\n  if (fill === false || fill === null) {\n    return false;\n  }\n\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      // First point of a segment -> need to add another point before this,\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        // In the middle of a segment, no need to add more points.\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n", "import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n", "import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n  const {chart, fill, line} = source;\n\n  if (isFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n\n  if (fill === 'shape') {\n    return true;\n  }\n\n  const boundary = computeBoundary(source);\n\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n\n  return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n\n  if (isFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n\n  return null;\n}\n\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\n", "import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {chart, index, line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  const meta = chart.getDatasetMeta(index);\n  const clip = getDatasetClipArea(chart, meta);\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n    unclipArea(ctx);\n  }\n}\n\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale, clip} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n\n  ctx.save();\n\n  let fillColor = below;\n  if (below !== above) {\n    if (property === 'x') {\n      clipVertical(ctx, target, area.top);\n      fill(ctx, {line, target, color: above, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipVertical(ctx, target, area.bottom);\n    } else if (property === 'y') {\n      clipHorizontal(ctx, target, area.left);\n      fill(ctx, {line, target, color: below, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipHorizontal(ctx, target, area.right);\n      fillColor = above;\n    }\n  }\n  fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n  ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(clipX, firstPoint.y);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(clipX, lastPoint.y);\n    }\n  }\n\n  ctx.lineTo(clipX, target.first().y);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale, clip} = cfg;\n  const segments = _segments(line, target, property);\n\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n\n    clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n    ctx.beginPath();\n\n    const lineLoop = !!line.pathSegment(ctx, src);\n\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n    ctx.restore();\n  }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n  const chartArea = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n\n  if (property === 'x' || property === 'y') {\n    let left, top, right, bottom;\n\n    if (property === 'x') {\n      left = start;\n      top = chartArea.top;\n      right = end;\n      bottom = chartArea.bottom;\n    } else {\n      left = chartArea.left;\n      top = start;\n      right = chartArea.right;\n      bottom = end;\n    }\n\n    ctx.beginPath();\n\n    if (clip) {\n      left = Math.max(left, clip.left);\n      right = Math.min(right, clip.right);\n      top = Math.max(top, clip.top);\n      bottom = Math.min(bottom, clip.bottom);\n    }\n\n    ctx.rect(left, top, right - left, bottom - top);\n    ctx.clip();\n  }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\n", "/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n  id: 'filler',\n\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n\n      meta.$filler = source;\n      sources.push(source);\n    }\n\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n", "import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n  _isBetween,\n  callback as call,\n  clipArea,\n  getRtlAdapter,\n  overrideTextDirection,\n  restoreTextDirection,\n  toFont,\n  toPadding,\n  unclipArea,\n  valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this._added = false;\n\n    // Contains hit boxes for each dataset (in dataset order)\n    this.legendHitBoxes = [];\n\n    /**\n \t\t * @private\n \t\t */\n    this._hoveredItem = null;\n\n    // Are we in doughnut mode which has a different data type\n    this.doughnutMode = false;\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n\n    this.legendItems = legendItems;\n  }\n\n  fit() {\n    const {options, ctx} = this;\n\n    // The legend may not be displayed for a variety of reasons including\n    // the fact that the defaults got set to `false`.\n    // When the legend is not displayed, there are no guarantees that the options\n    // are correctly formatted so we need to bail out as early as possible.\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    let width, height;\n\n    ctx.font = labelFont.string;\n\n    if (this.isHorizontal()) {\n      width = this.maxWidth; // fill all the width\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight; // fill all the height\n      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n    }\n\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n\n  /**\n\t * @private\n\t */\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n\n    return totalHeight;\n  }\n\n  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n\n    let left = 0;\n    let col = 0;\n\n    this.legendItems.forEach((legendItem, i) => {\n      const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n      // If too tall, go to new column\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n\n      // Store the hitbox width and height here. Final position will be updated in `draw`\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n      // Get max width\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n    return totalWidth;\n  }\n\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n\n      this._draw();\n\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n\n    this.drawTitle();\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    // current position\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n\n      // Set the ctx for the box\n      ctx.save();\n\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n      if (labelOpts.usePointStyle) {\n        // Recalculate x and y for drawPoint() because its expecting\n        // x and y to be center of figure (instead of top left)\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n\n        // Draw pointStyle as legend symbol\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        // Draw box as legend symbol\n        // Adjust position when boxHeight < fontSize (want it centered)\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n        ctx.beginPath();\n\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n\n      ctx.restore();\n    };\n\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n\n    // Horizontal\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n\n    overrideTextDirection(this.ctx, opts.textDirection);\n\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n      ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n\n      rtlHelper.setWidth(this.width);\n\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n\n      const realX = rtlHelper.x(x);\n\n      drawLegendBox(realX, y, legendItem);\n\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n      // Fill the actual label\n      fillText(rtlHelper.x(x), y, legendItem);\n\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else if (typeof legendItem.text !== 'string') {\n        const fontLineHeight = labelFont.lineHeight;\n        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n\n    if (!titleOpts.display) {\n      return;\n    }\n\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n\n    // These defaults are used when the legend is vertical.\n    // When horizontal, they are computed below.\n    let left = this.left;\n    let maxWidth = this.width;\n\n    if (this.isHorizontal()) {\n      // Move left / right so that the title is above the legend lines\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      // Move down so that the title is above the legend stack in every alignment\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n\n    // Now that we know the left edge of the inner legend box, compute the correct\n    // X coordinate from the title alignment\n    const x = _alignStartEnd(position, left, left + maxWidth);\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n\n  /**\n\t * @private\n\t */\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      // See if we are touching one of the dataset boxes\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          // Touching an element\n          return this.legendItems[i];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n\n    // Chart event already has relative position in it\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        call(opts.onLeave, [e, previous, this], this);\n      }\n\n      this._hoveredItem = hoveredItem;\n\n      if (hoveredItem && !sameItem) {\n        call(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      call(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n  return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n  let legendItemText = legendItem.text;\n  if (legendItemText && typeof legendItemText !== 'string') {\n    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n  }\n  return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n  let itemHeight = _itemHeight;\n  if (typeof legendItem.text !== 'string') {\n    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n  }\n  return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n  const labelHeight = legendItem.text ? legendItem.text.length : 0;\n  return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\n\nexport default {\n  id: 'legend',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Legend,\n\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n\n  // During the beforeUpdate step, the layout configuration needs to run\n  // This ensures that if the legend position changes (via an option update)\n  // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n\n  // The labels need to be built after datasets are updated to ensure that colors\n  // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n\n\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n\n    // a callback that will handle\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n\n    onHover: null,\n    onLeave: null,\n\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      // Generates labels shown in the legend\n      // Valid properties to return:\n      // text : text to display\n      // fillStyle : fill of coloured box\n      // strokeStyle: stroke of coloured box\n      // hidden : if this legend item refers to a hidden item\n      // lineCap : cap style for line\n      // lineDash\n      // lineDashOffset :\n      // lineJoin :\n      // lineWidth :\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n            // Below is extra data used for toggling the datasets\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n", "import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n\n    this.left = 0;\n    this.top = 0;\n\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n\n    if (!opts.display) {\n      return;\n    }\n\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\n\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\n\nexport default {\n  id: 'title',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Title,\n\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000         // by default greater than legend (1000) to be above\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n", "import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n  id: 'subtitle',\n\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500         // by default greater than legend (1000) and smaller than title (2000)\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n", "import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n  /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n\n    let i, len;\n    let xSet = new Set();\n    let y = 0;\n    let count = 0;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        xSet.add(pos.x);\n        y += pos.y;\n        ++count;\n      }\n    }\n\n    // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n    if (count === 0 || xSet.size === 0) {\n      return false;\n    }\n\n    const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n    return {\n      x: xAverage,\n      y: y / count\n    };\n  },\n\n  /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n\n    return {\n      x,\n      y\n    };\n  }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      // base = base.concat(toPush);\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n\n  return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n\n  // Count of all lines in the body\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    // Body lines may include some extra height depending on boxHeight\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n\n  // Title width\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n\n  ctx.save();\n\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n\n  // Body width\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n  // Body lines may include some extra width due to the color box\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n\n  // Reset back to 0\n  widthPadding = 0;\n\n  // Footer width\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n\n  ctx.restore();\n\n  // Add padding\n  width += padding.width;\n\n  return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n\n  return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\n\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n  // eslint-disable-next-line prefer-const\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n  // Args are: (tooltipItems, data)\n  beforeTitle: noop,\n  title(tooltipItems) {\n    if (tooltipItems.length > 0) {\n      const item = tooltipItems[0];\n      const labels = item.chart.data.labels;\n      const labelCount = labels ? labels.length : 0;\n\n      if (this && this.options && this.options.mode === 'dataset') {\n        return item.dataset.label || '';\n      } else if (item.label) {\n        return item.label;\n      } else if (labelCount > 0 && item.dataIndex < labelCount) {\n        return labels[item.dataIndex];\n      }\n    }\n\n    return '';\n  },\n  afterTitle: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeBody: noop,\n\n  // Args are: (tooltipItem, data)\n  beforeLabel: noop,\n  label(tooltipItem) {\n    if (this && this.options && this.options.mode === 'dataset') {\n      return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n    }\n\n    let label = tooltipItem.dataset.label || '';\n\n    if (label) {\n      label += ': ';\n    }\n    const value = tooltipItem.formattedValue;\n    if (!isNullOrUndef(value)) {\n      label += value;\n    }\n    return label;\n  },\n  labelColor(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      borderColor: options.borderColor,\n      backgroundColor: options.backgroundColor,\n      borderWidth: options.borderWidth,\n      borderDash: options.borderDash,\n      borderDashOffset: options.borderDashOffset,\n      borderRadius: 0,\n    };\n  },\n  labelTextColor() {\n    return this.options.bodyColor;\n  },\n  labelPointStyle(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      pointStyle: options.pointStyle,\n      rotation: options.rotation,\n    };\n  },\n  afterLabel: noop,\n\n  // Args are: (tooltipItems, data)\n  afterBody: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeFooter: noop,\n  footer: noop,\n  afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n  const result = callbacks[name].call(ctx, arg);\n\n  if (typeof result === 'undefined') {\n    return defaultCallbacks[name].call(ctx, arg);\n  }\n\n  return result;\n}\n\nexport class Tooltip extends Element {\n\n  /**\n   * @namespace Chart.Tooltip.positioners\n   */\n  static positioners = positioners;\n\n  constructor(config) {\n    super();\n\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n    // and `labelTextColors` to create a single variable\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n\n    if (cached) {\n      return cached;\n    }\n\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n\n  getTitle(context, options) {\n    const {callbacks} = options;\n\n    const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n    const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n    const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n    return lines;\n  }\n\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n    );\n  }\n\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n      bodyItems.push(bodyItem);\n    });\n\n    return bodyItems;\n  }\n\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n    );\n  }\n\n  // Get the footer and beforeFooter and afterFooter lines\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n\n    const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n    const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n    const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n    return lines;\n  }\n\n  /**\n\t * @private\n\t */\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n\n    // If the user provided a filter function, use it to modify the tooltip items\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n\n    // If the user provided a sorting function, use it to modify the tooltip items\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n\n    // Determine colors for boxes\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n      labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n      labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n    });\n\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n\n        // Left draws bottom -> top, this y1 is on the bottom\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n\n        // Right draws top -> bottom, thus y1 is on the top\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n\n        // Top draws left -> right, thus x1 is on the left\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n\n        // Bottom draws right -> left, thus x1 is on the right\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.titleAlign, options);\n\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n        }\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColor = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      // Recalculate x and y for drawPoint() because its expecting\n      // x and y to be center of figure (instead of top left)\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n\n      // Fill the point with white so that colours merge nicely if the opacity is < 1\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n\n      // Draw the point\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.fillStyle = labelColor.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      // Border\n      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.setLineDash(labelColor.borderDash || []);\n      ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n      // Fill a white rect so that colours merge nicely if the opacity is < 1\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n      const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        // Normal rect\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n\n    // restore fillStyle\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n    // Before body lines\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n\n    // Draw body lines now\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n\n      lines = bodyItem.lines;\n      // Draw Legend-like boxes if needed\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        // Reset for any lines that don't include colorbox\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n\n      each(bodyItem.after, fillLineOfText);\n    }\n\n    // Reset back to 0 for after body\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n\n    // After body lines\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing; // Remove last body spacing\n  }\n\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n\n      footerFont = toFont(options.footerFont);\n\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n\n    ctx.fill();\n\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n\n  /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n\n  /**\n   * Determine if the tooltip will draw anything\n   * @returns {boolean} True if the tooltip will render\n   */\n  _willRender() {\n    return !!this.opacity;\n  }\n\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n\n    if (!opacity) {\n      return;\n    }\n\n    this._updateAnimationTarget(options);\n\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n\n    // IE11/Edge does not like very small opacities, so snap to 0\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n    const padding = toPadding(options.padding);\n\n    // Truthy/falsey value for empty tooltip\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n\n      // Draw Background\n      this.drawBackground(pt, ctx, tooltipSize, options);\n\n      overrideTextDirection(ctx, options.textDirection);\n\n      pt.y += padding.top;\n\n      // Titles\n      this.drawTitle(pt, ctx, options);\n\n      // Body\n      this.drawBody(pt, ctx, options);\n\n      // Footer\n      this.drawFooter(pt, ctx, options);\n\n      restoreTextDirection(ctx, options.textDirection);\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n    // When there are multiple items shown, but the tooltip position is nearest mode\n    // an update may need to be made because our position may have changed even though\n    // the items are the same as before.\n    const positionChanged = this._positionChanged(active, e);\n\n    // Remember Last Actives\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n    // Only handle target event on tooltip change\n    if (changed) {\n      this._active = active;\n\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n\n        this.update(true, replay);\n      }\n    }\n\n    return changed;\n  }\n\n  /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      // But make sure that active elements are still valid.\n      return lastActive.filter(i =>\n        this.chart.data.datasets[i.datasetIndex] &&\n        this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n      );\n    }\n\n    // Find Active Elements for tooltips\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n    if (options.reverse) {\n      active.reverse();\n    }\n\n    return active;\n  }\n\n  /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\n\nexport default {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n\n      if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n        return;\n      }\n\n      tooltip.draw(chart.ctx);\n\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      // If the event is replayed from `update`, we should evaluate with the final positions.\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        // notify chart about the change, so it will render\n        args.changed = true;\n      }\n    }\n  },\n\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: defaultCallbacks\n  },\n\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n\n  // Resolve additionally from `interaction` options and defaults.\n  additionalOptionScopes: ['interaction']\n};\n", "import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n  const labels = this.getLabels();\n\n  if (value >= 0 && value < labels.length) {\n    return labels[value];\n  }\n  return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n  static id = 'category';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: _getLabelForValue\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n\n    // If we are viewing some subset of labels, slice the original array\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n\n  getLabelForValue(value) {\n    return _getLabelForValue.call(this, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    super.configure();\n\n    if (!this.isHorizontal()) {\n      // For backward compatibility, vertical category scale reverse is inverted.\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n\n  // Used to get data value locations. Value can either be an index or a numerical value\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  // Must override base implementation because it calls getPixelForValue\n  // and category scale can have duplicate values\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n\n  getBasePixel() {\n    return this.bottom;\n  }\n}\n", "import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n *    if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n *    Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n *    spacing = (max - min) / count\n *    Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n *    spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n  const ticks = [];\n  // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n  // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n  // for details.\n\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n\n  // Beyond MIN_SPACING floating point numbers being to lose precision\n  // such that we can't do the math necessary to generate ticks\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n\n  if (!isNullOrUndef(precision)) {\n    // If the user specified a precision, round to that number of decimal places\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n    // spacing = step;\n    // numSpaces = (max - min) / spacing;\n    // Note that we round here to handle the case where almostWhole translated an FP error\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n    // Sometimes these are no-ops, but it makes the code a lot clearer\n    // and when a user defined range is specified, we want the correct ticks\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    // Case 4\n    numSpaces = (niceMax - niceMin) / spacing;\n\n    // If very close to our rounded value, use it.\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n\n  // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n  // until this point\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n\n      if (niceMin < min) {\n        j++; // Skip niceMin\n      }\n      // If the next nice tick is close to min, skip it\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n\n  for (; j < numSpaces; ++j) {\n    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n    if (maxDefined && tickValue > max) {\n      break;\n    }\n    ticks.push({value: tickValue});\n  }\n\n  if (maxDefined && includeBounds && niceMax !== max) {\n    // If the previous tick is too close to max, replace it with max, else add max\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n\n  return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    /** @type {number} */\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n\n    return +raw;\n  }\n\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n\n    if (min === max) {\n      let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n      setMax(max + offset);\n\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    // eslint-disable-next-line prefer-const\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n\n    return maxTicks;\n  }\n\n  /**\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    // Figure out what the max number of ticks we can support it is based on the size of\n    // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n    // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n    // the graph. Make sure we always have at least 2 ticks\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n\n    super.configure();\n\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n", "import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n  static id = 'linear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.numeric\n    }\n  };\n\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? min : 0;\n    this.max = isFinite(max) ? max : 1;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n\n  // Utils\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\n", "import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n  return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n  const rangeStep = Math.pow(10, rangeExp);\n  const start = Math.floor(min / rangeStep);\n  const end = Math.ceil(max / rangeStep);\n  return end - start;\n}\n\nfunction startExp(min, max) {\n  const range = max - min;\n  let rangeExp = log10Floor(range);\n  while (steps(min, max, rangeExp) > 10) {\n    rangeExp++;\n  }\n  while (steps(min, max, rangeExp) < 10) {\n    rangeExp--;\n  }\n  return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n  min = finiteOrDefault(generationOptions.min, min);\n  const ticks = [];\n  const minExp = log10Floor(min);\n  let exp = startExp(min, max);\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  const stepSize = Math.pow(10, exp);\n  const base = minExp > exp ? Math.pow(10, minExp) : 0;\n  const start = Math.round((min - base) * precision) / precision;\n  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n  let significand = Math.floor((start - offset) / Math.pow(10, exp));\n  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n  while (value < max) {\n    ticks.push({value, major: isMajor(value), significand});\n    if (significand >= 10) {\n      significand = significand < 15 ? 15 : 20;\n    } else {\n      significand++;\n    }\n    if (significand >= 20) {\n      exp++;\n      significand = 2;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n  }\n  const lastTick = finiteOrDefault(generationOptions.max, value);\n  ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n  return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n  static id = 'logarithmic';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.logarithmic,\n      major: {\n        enabled: true\n      }\n    }\n  };\n\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isFinite(value) && value > 0 ? value : null;\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? Math.max(0, min) : null;\n    this.max = isFinite(max) ? Math.max(0, max) : null;\n\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n\n    // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n    // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n    if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n    }\n\n    this.handleTickRangeOptions();\n  }\n\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (min === max) {\n      if (min <= 0) { // includes null\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(changeExponent(min, -1));\n        setMax(changeExponent(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(changeExponent(max, -1));\n    }\n    if (max <= 0) {\n\n      setMax(changeExponent(min, +1));\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const start = this.min;\n\n    super.configure();\n\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\n", "import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n  // Right, this is really confusing and there is a lot of maths going on here\n  // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n  //\n  // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n  //\n  // Solution:\n  //\n  // We assume the radius of the polygon is half the size of the canvas at first\n  // at each index we check if the text overlaps.\n  //\n  // Where it does, we store that angle and that index.\n  //\n  // After finding the largest index and angle we calculate how much we need to remove\n  // from the shape radius to move the point inwards by that x.\n  //\n  // We average the left and right distances to get the maximum shape radius that can fit in the box\n  // along with labels.\n  //\n  // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n  // on each side, removing that from the size, halving it and adding the left x protrusion width.\n  //\n  // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n  // and position it in the most space efficient manner\n  //\n  // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n  // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n  // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n\n  // Now that text size is determined, compute the full positions\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n  const outerDistance = scale.drawingArea;\n  const {extra, additionalAngle, padding, size} = itemOpts;\n  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n  const y = yForAngle(pointLabelPosition.y, size.h, angle);\n  const textAlign = getTextAlignForAngle(angle);\n  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n  return {\n    // if to draw or overlapped\n    visible: true,\n\n    // Text position\n    x: pointLabelPosition.x,\n    y,\n\n    // Text rendering data\n    textAlign,\n\n    // Bounding box\n    left,\n    top: y,\n    right: left + size.w,\n    bottom: y + size.h\n  };\n}\n\nfunction isNotOverlapped(item, area) {\n  if (!area) {\n    return true;\n  }\n  const {left, top, right, bottom} = item;\n  const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n    _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n  return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const {centerPointLabels, display} = opts.pointLabels;\n  const itemOpts = {\n    extra: getTickBackdropHeight(opts) / 2,\n    additionalAngle: centerPointLabels ? PI / valueCount : 0\n  };\n  let area;\n\n  for (let i = 0; i < valueCount; i++) {\n    itemOpts.padding = padding[i];\n    itemOpts.size = labelSizes[i];\n\n    const item = createPointLabelItem(scale, i, itemOpts);\n    items.push(item);\n    if (display === 'auto') {\n      item.visible = isNotOverlapped(item, area);\n      if (item.visible) {\n        area = item;\n      }\n    }\n  }\n  return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n\n  return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\n\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n  const {left, top, right, bottom} = item;\n  const {backdropColor} = opts;\n\n  if (!isNullOrUndef(backdropColor)) {\n    const borderRadius = toTRBLCorners(opts.borderRadius);\n    const padding = toPadding(opts.backdropPadding);\n    ctx.fillStyle = backdropColor;\n\n    const backdropLeft = left - padding.left;\n    const backdropTop = top - padding.top;\n    const backdropWidth = right - left + padding.width;\n    const backdropHeight = bottom - top + padding.height;\n\n    if (Object.values(borderRadius).some(v => v !== 0)) {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {\n        x: backdropLeft,\n        y: backdropTop,\n        w: backdropWidth,\n        h: backdropHeight,\n        radius: borderRadius,\n      });\n      ctx.fill();\n    } else {\n      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n    }\n  }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const item = scale._pointLabelItems[i];\n    if (!item.visible) {\n      // overlapping\n      continue;\n    }\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    drawPointLabelBox(ctx, optsAtIndex, item);\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign} = item;\n\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    // Draw circular arcs between the points\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    // Draw straight lines connecting each index\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n\n  const {color, lineWidth} = gridLineOpts;\n\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(borderOpts.dash || []);\n  ctx.lineDashOffset = borderOpts.dashOffset;\n\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n  static id = 'radialLinear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    display: true,\n\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n\n    angleLines: {\n      display: true,\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n\n    grid: {\n      circular: false\n    },\n\n    startAngle: 0,\n\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n\n      callback: Ticks.formatters.numeric\n    },\n\n    pointLabels: {\n      backdropColor: undefined,\n\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPadding: 2,\n\n      // Boolean - if true, show point labels\n      display: true,\n\n      // Number - Point label font size in pixels\n      font: {\n        size: 10\n      },\n\n      // Function - Used to convert point labels\n      callback(label) {\n        return label;\n      },\n\n      // Number - Additionl padding between scale and pointLabel\n      padding: 5,\n\n      // Boolean - if true, center point labels to slices in polar chart\n      centerPointLabels: false\n    }\n  };\n\n  static defaultRoutes = {\n    'angleLines.color': 'borderColor',\n    'pointLabels.color': 'color',\n    'ticks.color': 'color'\n  };\n\n  static descriptors = {\n    angleLines: {\n      _fallback: 'grid'\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.xCenter = undefined;\n    /** @type {number} */\n    this.yCenter = undefined;\n    /** @type {number} */\n    this.drawingArea = undefined;\n    /** @type {string[]} */\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n\n    this.min = isFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n    // Point labels\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n\n  fit() {\n    const opts = this.options;\n\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n\n    // Take into account half font size + the yPadding of the top value\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid, border} = opts;\n    const labelCount = this._pointLabels.length;\n\n    let i, offset, position;\n\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0 || (index === 0 && this.min < 0)) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const context = this.getContext(index);\n          const optsAtIndex = grid.setContext(context);\n          const optsAtIndexBorder = border.setContext(context);\n\n          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n        }\n      });\n    }\n\n    if (angleLines.display) {\n      ctx.save();\n\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n\n        if (!lineWidth || !color) {\n          continue;\n        }\n\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n        offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {}\n\n  /**\n\t * @protected\n\t */\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    if (!tickOpts.display) {\n      return;\n    }\n\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n\n    this.ticks.forEach((tick, index) => {\n      if ((index === 0 && this.min >= 0) && !opts.reverse) {\n        return;\n      }\n\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n        strokeColor: optsAtIndex.textStrokeColor,\n        strokeWidth: optsAtIndex.textStrokeWidth,\n      });\n    });\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {}\n}\n", "import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n  return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n\n  // Only parse if it's not a timestamp already\n  if (!isFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n\n  if (value === null) {\n    return null;\n  }\n\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n\n  return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n\n  return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  /** @type {Object<number,object>} */\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n\n  // We set the major ticks separately from the above loop because calling startOf for every tick\n  // is expensive when there is a large number of ticks\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n  static id = 'time';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 2.7.0\n     */\n    bounds: 'data',\n\n    adapters: {},\n    time: {\n      parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n      unit: false, // false == automatic or override with week, month, year, etc.\n      round: false, // none, or override with week, month, year, etc.\n      isoWeekday: false, // override week start day\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      /**\n       * Ticks generation input values:\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\n       * @see https://github.com/chartjs/Chart.js/pull/4507\n       * @since 2.7.0\n       */\n      source: 'auto',\n\n      callback: false,\n\n      major: {\n        enabled: false\n      }\n    }\n  };\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {{data: number[], labels: number[], all: number[]}} */\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n\n    /** @type {Unit} */\n    this._unit = 'day';\n    /** @type {Unit=} */\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n\n  init(scaleOpts, opts = {}) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    /** @type {DateAdapter} */\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n    adapter.init(opts);\n\n    // Backward compatibility: before introducing adapter, `displayFormats` was\n    // supposed to contain *all* unit/string pairs but this can't be resolved\n    // when loading the scale (adapters are loaded afterward), so let's populate\n    // missing formats on update\n    mergeIf(time.displayFormats, adapter.formats());\n\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n\n    super.init(scaleOpts);\n\n    this._normalized = opts.normalized;\n  }\n\n  /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n    /**\n\t\t * @param {object} bounds\n\t\t */\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n\n    // If we have user provided `min` and `max` labels / data bounds can be ignored\n    if (!minDefined || !maxDefined) {\n      // Labels are always considered, when user did not force bounds\n      _applyBounds(this._getLabelBounds());\n\n      // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n      // data bounds are ignored (and don't need to be determined)\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n\n    min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n    // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n\n  /**\n\t * @private\n\t */\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n\n  /**\n\t * @return {object[]}\n\t */\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n\n    const min = this.min;\n    const max = this.max;\n\n    const ticks = _filterBetween(timestamps, min, max);\n\n    // PRIVATE\n    // determineUnitForFormatting relies on the number of ticks so we don't use it when\n    // autoSkip is enabled because we don't yet know what the final number of ticks will be\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n\n    if (options.reverse) {\n      ticks.reverse();\n    }\n\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n\n  afterAutoSkip() {\n    // Offsets for bar charts need to be handled with the auto skipped\n    // ticks. Once ticks have been skipped, we re-compute the offsets.\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n\n  /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n  initOffsets(timestamps = []) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n\n  /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    // @ts-ignore\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n\n    // For 'week' unit, handle the first day of week option\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n\n    // Align first ticks on unit\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n    // Prevent browser from freezing in case user options request millions of milliseconds\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n\n    // @ts-ignore\n    return Object.keys(ticks).sort(sorter).map(x => +x);\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n\n  /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n  format(value, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const fmt = format || formats[unit];\n    return this._adapter.format(value, fmt);\n  }\n\n  /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formatter = options.ticks.callback;\n\n    if (formatter) {\n      return call(formatter, [time, index, ticks], this);\n    }\n\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n\n    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n  }\n\n  /**\n\t * @param {object[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n\n  /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n\n  /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n\n    // pick the longest format (milliseconds) for guesstimation\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    // subtract 1 - if offset then there's one less label than tick\n    // if not offset then one half label padding is added to each end leaving room for one less label\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n\n    return (this._cache.data = this.normalize(timestamps));\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n\n  /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n  normalize(values) {\n    // It seems to be somewhat faster to do sorting first\n    return _arrayUnique(values.sort(sorter));\n  }\n}\n", "import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n  static id = 'timeseries';\n\n  /**\n   * @type {any}\n   */\n  static defaults = TimeScale.defaults;\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {object[]} */\n    this._table = [];\n    /** @type {number} */\n    this._minPos = undefined;\n    /** @type {number} */\n    this._tableRange = undefined;\n  }\n\n  /**\n\t * @protected\n\t */\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n\n  /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n\n    if (items.length < 2) {\n      // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n\n      // only add points that breaks the scale linearity\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n\n  /**\n    * Generates all timestamps defined in the data.\n    * Important: this method can return ticks outside the min and max range, it's the\n    * responsibility of the calling code to clamp values if needed.\n    * @protected\n    */\n  _generate() {\n    const min = this.min;\n    const max = this.max;\n    let timestamps = super.getDataTimestamps();\n    if (!timestamps.includes(min) || !timestamps.length) {\n      timestamps.splice(0, 0, min);\n    }\n    if (!timestamps.includes(max) || timestamps.length === 1) {\n      timestamps.push(max);\n    }\n    return timestamps.sort((a, b) => a - b);\n  }\n\n  /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      // If combining labels and data (data might not contain all labels),\n      // we need to recheck uniqueness and sort\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n\n    return timestamps;\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\n\nexport default TimeSeriesScale;\n", "export * from './controllers/index.js';\nexport * from './core/index.js';\nexport * from './elements/index.js';\nexport * from './platform/index.js';\nexport * from './plugins/index.js';\nexport * from './scales/index.js';\n\nimport * as controllers from './controllers/index.js';\nimport * as elements from './elements/index.js';\nimport * as plugins from './plugins/index.js';\nimport * as scales from './scales/index.js';\n\nexport {\n  controllers,\n  elements,\n  plugins,\n  scales,\n};\n\nexport const registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n", "import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n", "import { Chart } from \"chart.js/auto\";\n\nexport default function chart() {\n  return {\n    init() {\n      const { chartConfig } = this.$el.dataset;\n      new Chart(this.$el, JSON.parse(chartConfig));\n    },\n  };\n}\n", "export default function clock() {\n  return {\n    started: false,\n    hours: 0,\n    minutes: 0,\n    seconds: 0,\n    totalSeconds: 0,\n    interval: 0,\n    init() {\n      const { started, hours, minutes, seconds } = this.$el.dataset;\n      this.started = started === \"True\";\n      this.hours = Number(hours);\n      this.minutes = Number(minutes);\n      this.seconds = Number(seconds);\n      this.totalSeconds = this.hours * 3600 + this.minutes * 60 + this.seconds;\n      if (this.started) {\n        this.start();\n      }\n    },\n    start() {\n      this.interval = setInterval(() => {\n        this.totalSeconds += 1;\n        this.hours = this.calculateHours();\n        this.minutes = this.calculateMinutes();\n        this.seconds = this.calculateSeconds();\n      }, 1000);\n    },\n    stop() {\n      clearInterval(this.interval);\n      this.$dispatch(\"timer:stop\");\n    },\n    calculateHours() {\n      if (this.totalSeconds >= 3600) {\n        return Math.floor(this.totalSeconds / 3600);\n      }\n      return 0;\n    },\n    calculateMinutes() {\n      if (this.totalSeconds >= 60) {\n        const secondsMinusHours =\n          this.totalSeconds - this.calculateHours() * 3600;\n        if (secondsMinusHours >= 60) {\n          return Math.floor(secondsMinusHours / 60);\n        }\n        return 0;\n      }\n      return 0;\n    },\n    calculateSeconds() {\n      if (this.totalSeconds > 1) {\n        const hoursSeconds = this.calculateHours() * 3600;\n        const minutesSeconds = this.calculateMinutes() * 60;\n        const remainingSeconds =\n          this.totalSeconds - (hoursSeconds + minutesSeconds);\n        if (remainingSeconds > 0) {\n          return remainingSeconds;\n        }\n        return 0;\n      }\n      return 0;\n    },\n    clockDisplay() {\n      const hours = String(this.hours).padStart(2, \"0\");\n      const minutes = String(this.minutes).padStart(2, \"0\");\n      const seconds = String(this.seconds).padStart(2, \"0\");\n      return `${hours}:${minutes}:${seconds}`;\n    },\n  };\n}\n", "export default function companyLogoUploadPreview() {\n  return {\n    deleteImg: false,\n    thumbnailUrl: null,\n    imageUrl: null,\n    init() {\n      const { imageUrl } = this.$el.dataset;\n\n      if (imageUrl.length > 0 && imageUrl !== \"None\") {\n        this.imageUrl = imageUrl;\n        this.thumbnailUrl = imageUrl;\n      }\n    },\n    handleFileChange() {\n      if (this.$event.target?.files[0]) {\n        const imgUrl = URL.createObjectURL(this.$event.target.files[0]);\n        this.imageUrl = imgUrl;\n        this.thumbnailUrl = imgUrl;\n        this.deleteImg = false;\n      }\n    },\n    handleDeleteClick() {\n      this.deleteImg = true;\n      this.thumbnailUrl = null;\n      this.imageUrl = null;\n      this.$refs.fileInput.value = null;\n    },\n    showThumbnail() {\n      return false;\n    },\n  };\n}\n", "import Swal from \"sweetalert2\";\n\nexport default function confirmButton() {\n  return {\n    eventName: null,\n    swalOptions: null,\n    init() {\n      const { swalOptions, eventName } = this.$el.dataset;\n      this.swalOptions = JSON.parse(swalOptions);\n      this.eventName = eventName;\n    },\n    handleClick() {\n      Swal.fire(this.swalOptions).then(\n        ({ isConfirmed }) =>\n          isConfirmed && this.$el.dispatchEvent(new Event(this.eventName))\n      );\n    },\n  };\n}\n", "export default function dailyTimeline() {\n  return {\n    init() {},\n  };\n}\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 flatpickr from \"flatpickr\";\n\nexport default function dateTimePicker() {\n  return {\n    init() {\n      const { enableTime } = this.$el.dataset;\n      const options = {\n        enableTime: enableTime === \"yes\",\n        time_24hr: true,\n      };\n      flatpickr(this.$el, options);\n    },\n  };\n}\n", "/*!\r\n *  decimal.js v10.6.0\r\n *  An arbitrary-precision Decimal type for JavaScript.\r\n *  https://github.com/MikeMcl/decimal.js\r\n *  Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *  MIT Licence\r\n */\r\n\r\n\r\n// -----------------------------------  EDITABLE DEFAULTS  ------------------------------------ //\r\n\r\n\r\n  // The maximum exponent magnitude.\r\n  // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\r\nvar EXP_LIMIT = 9e15,                      // 0 to 9e15\r\n\r\n  // The limit on the value of `precision`, and on the value of the first argument to\r\n  // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n  MAX_DIGITS = 1e9,                        // 0 to 1e9\r\n\r\n  // Base conversion alphabet.\r\n  NUMERALS = '0123456789abcdef',\r\n\r\n  // The natural logarithm of 10 (1025 digits).\r\n  LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\r\n\r\n  // Pi (1025 digits).\r\n  PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\r\n\r\n\r\n  // The initial configuration properties of the Decimal constructor.\r\n  DEFAULTS = {\r\n\r\n    // These values must be integers within the stated ranges (inclusive).\r\n    // Most of these values can be changed at run-time using the `Decimal.config` method.\r\n\r\n    // The maximum number of significant digits of the result of a calculation or base conversion.\r\n    // E.g. `Decimal.config({ precision: 20 });`\r\n    precision: 20,                         // 1 to MAX_DIGITS\r\n\r\n    // The rounding mode used when rounding to `precision`.\r\n    //\r\n    // ROUND_UP         0 Away from zero.\r\n    // ROUND_DOWN       1 Towards zero.\r\n    // ROUND_CEIL       2 Towards +Infinity.\r\n    // ROUND_FLOOR      3 Towards -Infinity.\r\n    // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n    // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n    // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n    // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n    // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n    //\r\n    // E.g.\r\n    // `Decimal.rounding = 4;`\r\n    // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n    rounding: 4,                           // 0 to 8\r\n\r\n    // The modulo mode used when calculating the modulus: a mod n.\r\n    // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n    // The remainder (r) is calculated as: r = a - n * q.\r\n    //\r\n    // UP         0 The remainder is positive if the dividend is negative, else is negative.\r\n    // DOWN       1 The remainder has the same sign as the dividend (JavaScript %).\r\n    // FLOOR      3 The remainder has the same sign as the divisor (Python %).\r\n    // HALF_EVEN  6 The IEEE 754 remainder function.\r\n    // EUCLID     9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\r\n    //\r\n    // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\r\n    // division (9) are commonly used for the modulus operation. The other rounding modes can also\r\n    // be used, but they may not give useful results.\r\n    modulo: 1,                             // 0 to 9\r\n\r\n    // The exponent value at and beneath which `toString` returns exponential notation.\r\n    // JavaScript numbers: -7\r\n    toExpNeg: -7,                          // 0 to -EXP_LIMIT\r\n\r\n    // The exponent value at and above which `toString` returns exponential notation.\r\n    // JavaScript numbers: 21\r\n    toExpPos:  21,                         // 0 to EXP_LIMIT\r\n\r\n    // The minimum exponent value, beneath which underflow to zero occurs.\r\n    // JavaScript numbers: -324  (5e-324)\r\n    minE: -EXP_LIMIT,                      // -1 to -EXP_LIMIT\r\n\r\n    // The maximum exponent value, above which overflow to Infinity occurs.\r\n    // JavaScript numbers: 308  (1.7976931348623157e+308)\r\n    maxE: EXP_LIMIT,                       // 1 to EXP_LIMIT\r\n\r\n    // Whether to use cryptographically-secure random number generation, if available.\r\n    crypto: false                          // true/false\r\n  },\r\n\r\n\r\n// ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n  inexact, quadrant,\r\n  external = true,\r\n\r\n  decimalError = '[DecimalError] ',\r\n  invalidArgument = decimalError + 'Invalid argument: ',\r\n  precisionLimitExceeded = decimalError + 'Precision limit exceeded',\r\n  cryptoUnavailable = decimalError + 'crypto unavailable',\r\n  tag = '[object Decimal]',\r\n\r\n  mathfloor = Math.floor,\r\n  mathpow = Math.pow,\r\n\r\n  isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\r\n  isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\r\n  isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\r\n  isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n  BASE = 1e7,\r\n  LOG_BASE = 7,\r\n  MAX_SAFE_INTEGER = 9007199254740991,\r\n\r\n  LN10_PRECISION = LN10.length - 1,\r\n  PI_PRECISION = PI.length - 1,\r\n\r\n  // Decimal.prototype object\r\n  P = { toStringTag: tag };\r\n\r\n\r\n// Decimal prototype methods\r\n\r\n\r\n/*\r\n *  absoluteValue             abs\r\n *  ceil\r\n *  clampedTo                 clamp\r\n *  comparedTo                cmp\r\n *  cosine                    cos\r\n *  cubeRoot                  cbrt\r\n *  decimalPlaces             dp\r\n *  dividedBy                 div\r\n *  dividedToIntegerBy        divToInt\r\n *  equals                    eq\r\n *  floor\r\n *  greaterThan               gt\r\n *  greaterThanOrEqualTo      gte\r\n *  hyperbolicCosine          cosh\r\n *  hyperbolicSine            sinh\r\n *  hyperbolicTangent         tanh\r\n *  inverseCosine             acos\r\n *  inverseHyperbolicCosine   acosh\r\n *  inverseHyperbolicSine     asinh\r\n *  inverseHyperbolicTangent  atanh\r\n *  inverseSine               asin\r\n *  inverseTangent            atan\r\n *  isFinite\r\n *  isInteger                 isInt\r\n *  isNaN\r\n *  isNegative                isNeg\r\n *  isPositive                isPos\r\n *  isZero\r\n *  lessThan                  lt\r\n *  lessThanOrEqualTo         lte\r\n *  logarithm                 log\r\n *  [maximum]                 [max]\r\n *  [minimum]                 [min]\r\n *  minus                     sub\r\n *  modulo                    mod\r\n *  naturalExponential        exp\r\n *  naturalLogarithm          ln\r\n *  negated                   neg\r\n *  plus                      add\r\n *  precision                 sd\r\n *  round\r\n *  sine                      sin\r\n *  squareRoot                sqrt\r\n *  tangent                   tan\r\n *  times                     mul\r\n *  toBinary\r\n *  toDecimalPlaces           toDP\r\n *  toExponential\r\n *  toFixed\r\n *  toFraction\r\n *  toHexadecimal             toHex\r\n *  toNearest\r\n *  toNumber\r\n *  toOctal\r\n *  toPower                   pow\r\n *  toPrecision\r\n *  toSignificantDigits       toSD\r\n *  toString\r\n *  truncated                 trunc\r\n *  valueOf                   toJSON\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\nP.absoluteValue = P.abs = function () {\r\n  var x = new this.constructor(this);\r\n  if (x.s < 0) x.s = 1;\r\n  return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of positive Infinity.\r\n *\r\n */\r\nP.ceil = function () {\r\n  return finalise(new this.constructor(this), this.e + 1, 2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n * delineated by `min` and `max`.\r\n *\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\nP.clampedTo = P.clamp = function (min, max) {\r\n  var k,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n  min = new Ctor(min);\r\n  max = new Ctor(max);\r\n  if (!min.s || !max.s) return new Ctor(NaN);\r\n  if (min.gt(max)) throw Error(invalidArgument + max);\r\n  k = x.cmp(min);\r\n  return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\r\n};\r\n\r\n\r\n/*\r\n * Return\r\n *   1    if the value of this Decimal is greater than the value of `y`,\r\n *  -1    if the value of this Decimal is less than the value of `y`,\r\n *   0    if they have the same value,\r\n *   NaN  if the value of either Decimal is NaN.\r\n *\r\n */\r\nP.comparedTo = P.cmp = function (y) {\r\n  var i, j, xdL, ydL,\r\n    x = this,\r\n    xd = x.d,\r\n    yd = (y = new x.constructor(y)).d,\r\n    xs = x.s,\r\n    ys = y.s;\r\n\r\n  // Either NaN or \u00B1Infinity?\r\n  if (!xd || !yd) {\r\n    return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\r\n  }\r\n\r\n  // Either zero?\r\n  if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\r\n\r\n  // Signs differ?\r\n  if (xs !== ys) return xs;\r\n\r\n  // Compare exponents.\r\n  if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\r\n\r\n  xdL = xd.length;\r\n  ydL = yd.length;\r\n\r\n  // Compare digit by digit.\r\n  for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n    if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\r\n  }\r\n\r\n  // Compare lengths.\r\n  return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * cos(0)         = 1\r\n * cos(-0)        = 1\r\n * cos(Infinity)  = NaN\r\n * cos(-Infinity) = NaN\r\n * cos(NaN)       = NaN\r\n *\r\n */\r\nP.cosine = P.cos = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.d) return new Ctor(NaN);\r\n\r\n  // cos(0) = cos(-0) = 1\r\n  if (!x.d[0]) return new Ctor(1);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n  Ctor.rounding = 1;\r\n\r\n  x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *\r\n * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n *  cbrt(0)  =  0\r\n *  cbrt(-0) = -0\r\n *  cbrt(1)  =  1\r\n *  cbrt(-1) = -1\r\n *  cbrt(N)  =  N\r\n *  cbrt(-I) = -I\r\n *  cbrt(I)  =  I\r\n *\r\n * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n *\r\n */\r\nP.cubeRoot = P.cbrt = function () {\r\n  var e, m, n, r, rep, s, sd, t, t3, t3plusx,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n  external = false;\r\n\r\n  // Initial estimate.\r\n  s = x.s * mathpow(x.s * x, 1 / 3);\r\n\r\n   // Math.cbrt underflow/overflow?\r\n   // Pass x to Math.pow as integer, then adjust the exponent of the result.\r\n  if (!s || Math.abs(s) == 1 / 0) {\r\n    n = digitsToString(x.d);\r\n    e = x.e;\r\n\r\n    // Adjust n exponent so it is a multiple of 3 away from x exponent.\r\n    if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\r\n    s = mathpow(n, 1 / 3);\r\n\r\n    // Rarely, e may be one less than the result exponent value.\r\n    e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\r\n\r\n    if (s == 1 / 0) {\r\n      n = '5e' + e;\r\n    } else {\r\n      n = s.toExponential();\r\n      n = n.slice(0, n.indexOf('e') + 1) + e;\r\n    }\r\n\r\n    r = new Ctor(n);\r\n    r.s = x.s;\r\n  } else {\r\n    r = new Ctor(s.toString());\r\n  }\r\n\r\n  sd = (e = Ctor.precision) + 3;\r\n\r\n  // Halley's method.\r\n  // TODO? Compare Newton's method.\r\n  for (;;) {\r\n    t = r;\r\n    t3 = t.times(t).times(t);\r\n    t3plusx = t3.plus(x);\r\n    r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\r\n\r\n    // TODO? Replace with for-loop and checkRoundingDigits.\r\n    if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n      n = n.slice(sd - 3, sd + 1);\r\n\r\n      // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\r\n      // , i.e. approaching a rounding boundary, continue the iteration.\r\n      if (n == '9999' || !rep && n == '4999') {\r\n\r\n        // On the first iteration only, check to see if rounding up gives the exact result as the\r\n        // nines may infinitely repeat.\r\n        if (!rep) {\r\n          finalise(t, e + 1, 0);\r\n\r\n          if (t.times(t).times(t).eq(x)) {\r\n            r = t;\r\n            break;\r\n          }\r\n        }\r\n\r\n        sd += 4;\r\n        rep = 1;\r\n      } else {\r\n\r\n        // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n        // If not, then there are further digits and m will be truthy.\r\n        if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n          // Truncate to the first rounding digit.\r\n          finalise(r, e + 1, 1);\r\n          m = !r.times(r).times(r).eq(x);\r\n        }\r\n\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\nP.decimalPlaces = P.dp = function () {\r\n  var w,\r\n    d = this.d,\r\n    n = NaN;\r\n\r\n  if (d) {\r\n    w = d.length - 1;\r\n    n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n    // Subtract the number of trailing zeros of the last word.\r\n    w = d[w];\r\n    if (w) for (; w % 10 == 0; w /= 10) n--;\r\n    if (n < 0) n = 0;\r\n  }\r\n\r\n  return n;\r\n};\r\n\r\n\r\n/*\r\n *  n / 0 = I\r\n *  n / N = N\r\n *  n / I = 0\r\n *  0 / n = 0\r\n *  0 / 0 = N\r\n *  0 / N = N\r\n *  0 / I = 0\r\n *  N / n = N\r\n *  N / 0 = N\r\n *  N / N = N\r\n *  N / I = N\r\n *  I / n = I\r\n *  I / 0 = I\r\n *  I / N = N\r\n *  I / I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedBy = P.div = function (y) {\r\n  return divide(this, new this.constructor(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedToIntegerBy = P.divToInt = function (y) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n  return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\nP.equals = P.eq = function (y) {\r\n  return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of negative Infinity.\r\n *\r\n */\r\nP.floor = function () {\r\n  return finalise(new this.constructor(this), this.e + 1, 3);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\nP.greaterThan = P.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 Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\nP.greaterThanOrEqualTo = P.gte = function (y) {\r\n  var k = this.cmp(y);\r\n  return k == 1 || k === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [1, Infinity]\r\n *\r\n * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n *\r\n * cosh(0)         = 1\r\n * cosh(-0)        = 1\r\n * cosh(Infinity)  = Infinity\r\n * cosh(-Infinity) = Infinity\r\n * cosh(NaN)       = NaN\r\n *\r\n *  x        time taken (ms)   result\r\n * 1000      9                 9.8503555700852349694e+433\r\n * 10000     25                4.4034091128314607936e+4342\r\n * 100000    171               1.4033316802130615897e+43429\r\n * 1000000   3817              1.5166076984010437725e+434294\r\n * 10000000  abandoned after 2 minute wait\r\n *\r\n * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n *\r\n */\r\nP.hyperbolicCosine = P.cosh = function () {\r\n  var k, n, pr, rm, len,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    one = new Ctor(1);\r\n\r\n  if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\r\n  if (x.isZero()) return one;\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n  Ctor.rounding = 1;\r\n  len = x.d.length;\r\n\r\n  // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\r\n  // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\r\n\r\n  // Estimate the optimum number of times to use the argument reduction.\r\n  // TODO? Estimation reused from cosine() and may not be optimal here.\r\n  if (len < 32) {\r\n    k = Math.ceil(len / 3);\r\n    n = (1 / tinyPow(4, k)).toString();\r\n  } else {\r\n    k = 16;\r\n    n = '2.3283064365386962890625e-10';\r\n  }\r\n\r\n  x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\r\n\r\n  // Reverse argument reduction\r\n  var cosh2_x,\r\n    i = k,\r\n    d8 = new Ctor(8);\r\n  for (; i--;) {\r\n    cosh2_x = x.times(x);\r\n    x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\r\n  }\r\n\r\n  return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n *\r\n * sinh(0)         = 0\r\n * sinh(-0)        = -0\r\n * sinh(Infinity)  = Infinity\r\n * sinh(-Infinity) = -Infinity\r\n * sinh(NaN)       = NaN\r\n *\r\n * x        time taken (ms)\r\n * 10       2 ms\r\n * 100      5 ms\r\n * 1000     14 ms\r\n * 10000    82 ms\r\n * 100000   886 ms            1.4033316802130615897e+43429\r\n * 200000   2613 ms\r\n * 300000   5407 ms\r\n * 400000   8824 ms\r\n * 500000   13026 ms          8.7080643612718084129e+217146\r\n * 1000000  48543 ms\r\n *\r\n * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n *\r\n */\r\nP.hyperbolicSine = P.sinh = function () {\r\n  var k, pr, rm, len,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n  Ctor.rounding = 1;\r\n  len = x.d.length;\r\n\r\n  if (len < 3) {\r\n    x = taylorSeries(Ctor, 2, x, x, true);\r\n  } else {\r\n\r\n    // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\r\n    // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\r\n    // 3 multiplications and 1 addition\r\n\r\n    // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\r\n    // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\r\n    // 4 multiplications and 2 additions\r\n\r\n    // Estimate the optimum number of times to use the argument reduction.\r\n    k = 1.4 * Math.sqrt(len);\r\n    k = k > 16 ? 16 : k | 0;\r\n\r\n    x = x.times(1 / tinyPow(5, k));\r\n    x = taylorSeries(Ctor, 2, x, x, true);\r\n\r\n    // Reverse argument reduction\r\n    var sinh2_x,\r\n      d5 = new Ctor(5),\r\n      d16 = new Ctor(16),\r\n      d20 = new Ctor(20);\r\n    for (; k--;) {\r\n      sinh2_x = x.times(x);\r\n      x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\r\n    }\r\n  }\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * tanh(x) = sinh(x) / cosh(x)\r\n *\r\n * tanh(0)         = 0\r\n * tanh(-0)        = -0\r\n * tanh(Infinity)  = 1\r\n * tanh(-Infinity) = -1\r\n * tanh(NaN)       = NaN\r\n *\r\n */\r\nP.hyperbolicTangent = P.tanh = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(x.s);\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + 7;\r\n  Ctor.rounding = 1;\r\n\r\n  return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n * this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [0, pi]\r\n *\r\n * acos(x) = pi/2 - asin(x)\r\n *\r\n * acos(0)       = pi/2\r\n * acos(-0)      = pi/2\r\n * acos(1)       = 0\r\n * acos(-1)      = pi\r\n * acos(1/2)     = pi/3\r\n * acos(-1/2)    = 2*pi/3\r\n * acos(|x| > 1) = NaN\r\n * acos(NaN)     = NaN\r\n *\r\n */\r\nP.inverseCosine = P.acos = function () {\r\n  var x = this,\r\n    Ctor = x.constructor,\r\n    k = x.abs().cmp(1),\r\n    pr = Ctor.precision,\r\n    rm = Ctor.rounding;\r\n\r\n  if (k !== -1) {\r\n    return k === 0\r\n      // |x| is 1\r\n      ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\r\n      // |x| > 1 or x is NaN\r\n      : new Ctor(NaN);\r\n  }\r\n\r\n  if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n  // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\r\n\r\n  Ctor.precision = pr + 6;\r\n  Ctor.rounding = 1;\r\n\r\n  // See https://github.com/MikeMcl/decimal.js/pull/217\r\n  x = new Ctor(1).minus(x).div(x.plus(1)).sqrt().atan();\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [1, Infinity]\r\n * Range: [0, Infinity]\r\n *\r\n * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n *\r\n * acosh(x < 1)     = NaN\r\n * acosh(NaN)       = NaN\r\n * acosh(Infinity)  = Infinity\r\n * acosh(-Infinity) = NaN\r\n * acosh(0)         = NaN\r\n * acosh(-0)        = NaN\r\n * acosh(1)         = 0\r\n * acosh(-1)        = NaN\r\n *\r\n */\r\nP.inverseHyperbolicCosine = P.acosh = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\r\n  if (!x.isFinite()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\r\n  Ctor.rounding = 1;\r\n  external = false;\r\n\r\n  x = x.times(x).minus(1).sqrt().plus(x);\r\n\r\n  external = true;\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n *\r\n * asinh(NaN)       = NaN\r\n * asinh(Infinity)  = Infinity\r\n * asinh(-Infinity) = -Infinity\r\n * asinh(0)         = 0\r\n * asinh(-0)        = -0\r\n *\r\n */\r\nP.inverseHyperbolicSine = P.asinh = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\r\n  Ctor.rounding = 1;\r\n  external = false;\r\n\r\n  x = x.times(x).plus(1).sqrt().plus(x);\r\n\r\n  external = true;\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n *\r\n * atanh(|x| > 1)   = NaN\r\n * atanh(NaN)       = NaN\r\n * atanh(Infinity)  = NaN\r\n * atanh(-Infinity) = NaN\r\n * atanh(0)         = 0\r\n * atanh(-0)        = -0\r\n * atanh(1)         = Infinity\r\n * atanh(-1)        = -Infinity\r\n *\r\n */\r\nP.inverseHyperbolicTangent = P.atanh = function () {\r\n  var pr, rm, wpr, xsd,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(NaN);\r\n  if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  xsd = x.sd();\r\n\r\n  if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\r\n\r\n  Ctor.precision = wpr = xsd - x.e;\r\n\r\n  x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\r\n\r\n  Ctor.precision = pr + 4;\r\n  Ctor.rounding = 1;\r\n\r\n  x = x.ln();\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.times(0.5);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n *\r\n * asin(0)       = 0\r\n * asin(-0)      = -0\r\n * asin(1/2)     = pi/6\r\n * asin(-1/2)    = -pi/6\r\n * asin(1)       = pi/2\r\n * asin(-1)      = -pi/2\r\n * asin(|x| > 1) = NaN\r\n * asin(NaN)     = NaN\r\n *\r\n * TODO? Compare performance of Taylor series.\r\n *\r\n */\r\nP.inverseSine = P.asin = function () {\r\n  var halfPi, k,\r\n    pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  k = x.abs().cmp(1);\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  if (k !== -1) {\r\n\r\n    // |x| is 1\r\n    if (k === 0) {\r\n      halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n      halfPi.s = x.s;\r\n      return halfPi;\r\n    }\r\n\r\n    // |x| > 1 or x is NaN\r\n    return new Ctor(NaN);\r\n  }\r\n\r\n  // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\r\n\r\n  Ctor.precision = pr + 6;\r\n  Ctor.rounding = 1;\r\n\r\n  x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n *\r\n * atan(0)         = 0\r\n * atan(-0)        = -0\r\n * atan(1)         = pi/4\r\n * atan(-1)        = -pi/4\r\n * atan(Infinity)  = pi/2\r\n * atan(-Infinity) = -pi/2\r\n * atan(NaN)       = NaN\r\n *\r\n */\r\nP.inverseTangent = P.atan = function () {\r\n  var i, j, k, n, px, t, r, wpr, x2,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision,\r\n    rm = Ctor.rounding;\r\n\r\n  if (!x.isFinite()) {\r\n    if (!x.s) return new Ctor(NaN);\r\n    if (pr + 4 <= PI_PRECISION) {\r\n      r = getPi(Ctor, pr + 4, rm).times(0.5);\r\n      r.s = x.s;\r\n      return r;\r\n    }\r\n  } else if (x.isZero()) {\r\n    return new Ctor(x);\r\n  } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\r\n    r = getPi(Ctor, pr + 4, rm).times(0.25);\r\n    r.s = x.s;\r\n    return r;\r\n  }\r\n\r\n  Ctor.precision = wpr = pr + 10;\r\n  Ctor.rounding = 1;\r\n\r\n  // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\r\n\r\n  // Argument reduction\r\n  // Ensure |x| < 0.42\r\n  // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\r\n\r\n  k = Math.min(28, wpr / LOG_BASE + 2 | 0);\r\n\r\n  for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\r\n\r\n  external = false;\r\n\r\n  j = Math.ceil(wpr / LOG_BASE);\r\n  n = 1;\r\n  x2 = x.times(x);\r\n  r = new Ctor(x);\r\n  px = x;\r\n\r\n  // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n  for (; i !== -1;) {\r\n    px = px.times(x2);\r\n    t = r.minus(px.div(n += 2));\r\n\r\n    px = px.times(x2);\r\n    r = t.plus(px.div(n += 2));\r\n\r\n    if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\r\n  }\r\n\r\n  if (k) r = r.times(2 << (k - 1));\r\n\r\n  external = true;\r\n\r\n  return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n *\r\n */\r\nP.isFinite = function () {\r\n  return !!this.d;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\nP.isInteger = P.isInt = function () {\r\n  return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is NaN, otherwise return false.\r\n *\r\n */\r\nP.isNaN = function () {\r\n  return !this.s;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\nP.isNegative = P.isNeg = function () {\r\n  return this.s < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\nP.isPositive = P.isPos = function () {\r\n  return this.s > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n *\r\n */\r\nP.isZero = function () {\r\n  return !!this.d && this.d[0] === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThan = P.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 Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThanOrEqualTo = P.lte = function (y) {\r\n  return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * If no base is specified, return log[10](arg).\r\n *\r\n * log[base](arg) = ln(arg) / ln(base)\r\n *\r\n * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n * otherwise:\r\n *\r\n * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n *\r\n * log[-b](a)       = NaN\r\n * log[0](a)        = NaN\r\n * log[1](a)        = NaN\r\n * log[NaN](a)      = NaN\r\n * log[Infinity](a) = NaN\r\n * log[b](0)        = -Infinity\r\n * log[b](-0)       = -Infinity\r\n * log[b](-a)       = NaN\r\n * log[b](1)        = 0\r\n * log[b](Infinity) = Infinity\r\n * log[b](NaN)      = NaN\r\n *\r\n * [base] {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\nP.logarithm = P.log = function (base) {\r\n  var isBase10, d, denominator, k, inf, num, sd, r,\r\n    arg = this,\r\n    Ctor = arg.constructor,\r\n    pr = Ctor.precision,\r\n    rm = Ctor.rounding,\r\n    guard = 5;\r\n\r\n  // Default base is 10.\r\n  if (base == null) {\r\n    base = new Ctor(10);\r\n    isBase10 = true;\r\n  } else {\r\n    base = new Ctor(base);\r\n    d = base.d;\r\n\r\n    // Return NaN if base is negative, or non-finite, or is 0 or 1.\r\n    if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\r\n\r\n    isBase10 = base.eq(10);\r\n  }\r\n\r\n  d = arg.d;\r\n\r\n  // Is arg negative, non-finite, 0 or 1?\r\n  if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\r\n    return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\r\n  }\r\n\r\n  // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\r\n  // integer power of 10.\r\n  if (isBase10) {\r\n    if (d.length > 1) {\r\n      inf = true;\r\n    } else {\r\n      for (k = d[0]; k % 10 === 0;) k /= 10;\r\n      inf = k !== 1;\r\n    }\r\n  }\r\n\r\n  external = false;\r\n  sd = pr + guard;\r\n  num = naturalLogarithm(arg, sd);\r\n  denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n\r\n  // The result will have 5 rounding digits.\r\n  r = divide(num, denominator, sd, 1);\r\n\r\n  // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\r\n  // calculate 10 further digits.\r\n  //\r\n  // If the result is known to have an infinite decimal expansion, repeat this until it is clear\r\n  // that the result is above or below the boundary. Otherwise, if after calculating the 10\r\n  // further digits, the last 14 are nines, round up and assume the result is exact.\r\n  // Also assume the result is exact if the last 14 are zero.\r\n  //\r\n  // Example of a result that will be incorrectly rounded:\r\n  // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\r\n  // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\r\n  // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\r\n  // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\r\n  // place is still 2.6.\r\n  if (checkRoundingDigits(r.d, k = pr, rm)) {\r\n\r\n    do {\r\n      sd += 10;\r\n      num = naturalLogarithm(arg, sd);\r\n      denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n      r = divide(num, denominator, sd, 1);\r\n\r\n      if (!inf) {\r\n\r\n        // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\r\n        if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\r\n          r = finalise(r, pr + 1, 0);\r\n        }\r\n\r\n        break;\r\n      }\r\n    } while (checkRoundingDigits(r.d, k += 10, rm));\r\n  }\r\n\r\n  external = true;\r\n\r\n  return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.max = function () {\r\n  Array.prototype.push.call(arguments, this);\r\n  return maxOrMin(this.constructor, arguments, -1);\r\n};\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.min = function () {\r\n  Array.prototype.push.call(arguments, this);\r\n  return maxOrMin(this.constructor, arguments, 1);\r\n};\r\n */\r\n\r\n\r\n/*\r\n *  n - 0 = n\r\n *  n - N = N\r\n *  n - I = -I\r\n *  0 - n = -n\r\n *  0 - 0 = 0\r\n *  0 - N = N\r\n *  0 - I = -I\r\n *  N - n = N\r\n *  N - 0 = N\r\n *  N - N = N\r\n *  N - I = N\r\n *  I - n = I\r\n *  I - 0 = I\r\n *  I - N = N\r\n *  I - I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.minus = P.sub = function (y) {\r\n  var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // If either is not finite...\r\n  if (!x.d || !y.d) {\r\n\r\n    // Return NaN if either is NaN.\r\n    if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n    // Return y negated if x is finite and y is \u00B1Infinity.\r\n    else if (x.d) y.s = -y.s;\r\n\r\n    // Return x if y is finite and x is \u00B1Infinity.\r\n    // Return x if both are \u00B1Infinity with different signs.\r\n    // Return NaN if both are \u00B1Infinity with the same sign.\r\n    else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\r\n\r\n    return y;\r\n  }\r\n\r\n  // If signs differ...\r\n  if (x.s != y.s) {\r\n    y.s = -y.s;\r\n    return x.plus(y);\r\n  }\r\n\r\n  xd = x.d;\r\n  yd = y.d;\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  // If either is zero...\r\n  if (!xd[0] || !yd[0]) {\r\n\r\n    // Return y negated if x is zero and y is non-zero.\r\n    if (yd[0]) y.s = -y.s;\r\n\r\n    // Return x if y is zero and x is non-zero.\r\n    else if (xd[0]) y = new Ctor(x);\r\n\r\n    // Return zero if both are zero.\r\n    // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\r\n    else return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n    return external ? finalise(y, pr, rm) : y;\r\n  }\r\n\r\n  // x and y are finite, non-zero numbers with the same sign.\r\n\r\n  // Calculate base 1e7 exponents.\r\n  e = mathfloor(y.e / LOG_BASE);\r\n  xe = mathfloor(x.e / LOG_BASE);\r\n\r\n  xd = xd.slice();\r\n  k = xe - e;\r\n\r\n  // If base 1e7 exponents differ...\r\n  if (k) {\r\n    xLTy = k < 0;\r\n\r\n    if (xLTy) {\r\n      d = xd;\r\n      k = -k;\r\n      len = yd.length;\r\n    } else {\r\n      d = yd;\r\n      e = xe;\r\n      len = xd.length;\r\n    }\r\n\r\n    // Numbers with massively different exponents would result in a very high number of\r\n    // zeros needing to be prepended, but this can be avoided while still ensuring correct\r\n    // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n    i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n    if (k > i) {\r\n      k = i;\r\n      d.length = 1;\r\n    }\r\n\r\n    // Prepend zeros to equalise exponents.\r\n    d.reverse();\r\n    for (i = k; i--;) d.push(0);\r\n    d.reverse();\r\n\r\n  // Base 1e7 exponents equal.\r\n  } else {\r\n\r\n    // Check digits to determine which is the bigger number.\r\n\r\n    i = xd.length;\r\n    len = yd.length;\r\n    xLTy = i < len;\r\n    if (xLTy) len = i;\r\n\r\n    for (i = 0; i < len; i++) {\r\n      if (xd[i] != yd[i]) {\r\n        xLTy = xd[i] < yd[i];\r\n        break;\r\n      }\r\n    }\r\n\r\n    k = 0;\r\n  }\r\n\r\n  if (xLTy) {\r\n    d = xd;\r\n    xd = yd;\r\n    yd = d;\r\n    y.s = -y.s;\r\n  }\r\n\r\n  len = xd.length;\r\n\r\n  // Append zeros to `xd` if shorter.\r\n  // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\r\n  for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n  // Subtract yd from xd.\r\n  for (i = yd.length; i > k;) {\r\n\r\n    if (xd[--i] < yd[i]) {\r\n      for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n      --xd[j];\r\n      xd[i] += BASE;\r\n    }\r\n\r\n    xd[i] -= yd[i];\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; xd[--len] === 0;) xd.pop();\r\n\r\n  // Remove leading zeros and adjust exponent accordingly.\r\n  for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n  // Zero?\r\n  if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n  y.d = xd;\r\n  y.e = getBase10Exponent(xd, e);\r\n\r\n  return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n *   n % 0 =  N\r\n *   n % N =  N\r\n *   n % I =  n\r\n *   0 % n =  0\r\n *  -0 % n = -0\r\n *   0 % 0 =  N\r\n *   0 % N =  N\r\n *   0 % I =  0\r\n *   N % n =  N\r\n *   N % 0 =  N\r\n *   N % N =  N\r\n *   N % I =  N\r\n *   I % n =  N\r\n *   I % 0 =  N\r\n *   I % N =  N\r\n *   I % I =  N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * The result depends on the modulo mode.\r\n *\r\n */\r\nP.modulo = P.mod = function (y) {\r\n  var q,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // Return NaN if x is \u00B1Infinity or NaN, or y is NaN or \u00B10.\r\n  if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\r\n\r\n  // Return x if y is \u00B1Infinity or x is \u00B10.\r\n  if (!y.d || x.d && !x.d[0]) {\r\n    return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\r\n  }\r\n\r\n  // Prevent rounding of intermediate calculations.\r\n  external = false;\r\n\r\n  if (Ctor.modulo == 9) {\r\n\r\n    // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n    // result = x - q * y    where  0 <= result < abs(y)\r\n    q = divide(x, y.abs(), 0, 3, 1);\r\n    q.s *= y.s;\r\n  } else {\r\n    q = divide(x, y, 0, Ctor.modulo, 1);\r\n  }\r\n\r\n  q = q.times(y);\r\n\r\n  external = true;\r\n\r\n  return x.minus(q);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalExponential = P.exp = function () {\r\n  return naturalExponential(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalLogarithm = P.ln = function () {\r\n  return naturalLogarithm(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\nP.negated = P.neg = function () {\r\n  var x = new this.constructor(this);\r\n  x.s = -x.s;\r\n  return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n *  n + 0 = n\r\n *  n + N = N\r\n *  n + I = I\r\n *  0 + n = n\r\n *  0 + 0 = 0\r\n *  0 + N = N\r\n *  0 + I = I\r\n *  N + n = N\r\n *  N + 0 = N\r\n *  N + N = N\r\n *  N + I = N\r\n *  I + n = I\r\n *  I + 0 = I\r\n *  I + N = N\r\n *  I + I = I\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.plus = P.add = function (y) {\r\n  var carry, d, e, i, k, len, pr, rm, xd, yd,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // If either is not finite...\r\n  if (!x.d || !y.d) {\r\n\r\n    // Return NaN if either is NaN.\r\n    if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n    // Return x if y is finite and x is \u00B1Infinity.\r\n    // Return x if both are \u00B1Infinity with the same sign.\r\n    // Return NaN if both are \u00B1Infinity with different signs.\r\n    // Return y if x is finite and y is \u00B1Infinity.\r\n    else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\r\n\r\n    return y;\r\n  }\r\n\r\n   // If 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  xd = x.d;\r\n  yd = y.d;\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  // If either is zero...\r\n  if (!xd[0] || !yd[0]) {\r\n\r\n    // Return x if y is zero.\r\n    // Return y if y is non-zero.\r\n    if (!yd[0]) y = new Ctor(x);\r\n\r\n    return external ? finalise(y, pr, rm) : y;\r\n  }\r\n\r\n  // x and y are finite, non-zero numbers with the same sign.\r\n\r\n  // Calculate base 1e7 exponents.\r\n  k = mathfloor(x.e / LOG_BASE);\r\n  e = mathfloor(y.e / LOG_BASE);\r\n\r\n  xd = xd.slice();\r\n  i = k - e;\r\n\r\n  // If base 1e7 exponents differ...\r\n  if (i) {\r\n\r\n    if (i < 0) {\r\n      d = xd;\r\n      i = -i;\r\n      len = yd.length;\r\n    } else {\r\n      d = yd;\r\n      e = k;\r\n      len = xd.length;\r\n    }\r\n\r\n    // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n    k = Math.ceil(pr / LOG_BASE);\r\n    len = k > len ? k + 1 : len + 1;\r\n\r\n    if (i > len) {\r\n      i = len;\r\n      d.length = 1;\r\n    }\r\n\r\n    // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n    d.reverse();\r\n    for (; i--;) d.push(0);\r\n    d.reverse();\r\n  }\r\n\r\n  len = xd.length;\r\n  i = yd.length;\r\n\r\n  // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n  if (len - i < 0) {\r\n    i = len;\r\n    d = yd;\r\n    yd = xd;\r\n    xd = d;\r\n  }\r\n\r\n  // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n  for (carry = 0; i;) {\r\n    carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n    xd[i] %= BASE;\r\n  }\r\n\r\n  if (carry) {\r\n    xd.unshift(carry);\r\n    ++e;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n  for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n  y.d = xd;\r\n  y.e = getBase10Exponent(xd, e);\r\n\r\n  return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\nP.precision = P.sd = function (z) {\r\n  var k,\r\n    x = this;\r\n\r\n  if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n  if (x.d) {\r\n    k = getPrecision(x.d);\r\n    if (z && x.e + 1 > k) k = x.e + 1;\r\n  } else {\r\n    k = NaN;\r\n  }\r\n\r\n  return k;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\nP.round = function () {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n *\r\n * sin(0)         = 0\r\n * sin(-0)        = -0\r\n * sin(Infinity)  = NaN\r\n * sin(-Infinity) = NaN\r\n * sin(NaN)       = NaN\r\n *\r\n */\r\nP.sine = P.sin = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(NaN);\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n  Ctor.rounding = 1;\r\n\r\n  x = sine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n *  sqrt(-n) =  N\r\n *  sqrt(N)  =  N\r\n *  sqrt(-I) =  N\r\n *  sqrt(I)  =  I\r\n *  sqrt(0)  =  0\r\n *  sqrt(-0) = -0\r\n *\r\n */\r\nP.squareRoot = P.sqrt = function () {\r\n  var m, n, sd, r, rep, t,\r\n    x = this,\r\n    d = x.d,\r\n    e = x.e,\r\n    s = x.s,\r\n    Ctor = x.constructor;\r\n\r\n  // Negative/NaN/Infinity/zero?\r\n  if (s !== 1 || !d || !d[0]) {\r\n    return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\r\n  }\r\n\r\n  external = false;\r\n\r\n  // Initial estimate.\r\n  s = Math.sqrt(+x);\r\n\r\n  // Math.sqrt underflow/overflow?\r\n  // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n  if (s == 0 || s == 1 / 0) {\r\n    n = digitsToString(d);\r\n\r\n    if ((n.length + e) % 2 == 0) n += '0';\r\n    s = Math.sqrt(n);\r\n    e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n    if (s == 1 / 0) {\r\n      n = '5e' + e;\r\n    } else {\r\n      n = s.toExponential();\r\n      n = n.slice(0, n.indexOf('e') + 1) + e;\r\n    }\r\n\r\n    r = new Ctor(n);\r\n  } else {\r\n    r = new Ctor(s.toString());\r\n  }\r\n\r\n  sd = (e = Ctor.precision) + 3;\r\n\r\n  // Newton-Raphson iteration.\r\n  for (;;) {\r\n    t = r;\r\n    r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\r\n\r\n    // TODO? Replace with for-loop and checkRoundingDigits.\r\n    if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n      n = n.slice(sd - 3, sd + 1);\r\n\r\n      // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n      // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n      if (n == '9999' || !rep && n == '4999') {\r\n\r\n        // On the first iteration only, check to see if rounding up gives the exact result as the\r\n        // nines may infinitely repeat.\r\n        if (!rep) {\r\n          finalise(t, e + 1, 0);\r\n\r\n          if (t.times(t).eq(x)) {\r\n            r = t;\r\n            break;\r\n          }\r\n        }\r\n\r\n        sd += 4;\r\n        rep = 1;\r\n      } else {\r\n\r\n        // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n        // If not, then there are further digits and m will be truthy.\r\n        if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n          // Truncate to the first rounding digit.\r\n          finalise(r, e + 1, 1);\r\n          m = !r.times(r).eq(x);\r\n        }\r\n\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * tan(0)         = 0\r\n * tan(-0)        = -0\r\n * tan(Infinity)  = NaN\r\n * tan(-Infinity) = NaN\r\n * tan(NaN)       = NaN\r\n *\r\n */\r\nP.tangent = P.tan = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(NaN);\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + 10;\r\n  Ctor.rounding = 1;\r\n\r\n  x = x.sin();\r\n  x.s = 1;\r\n  x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *  n * 0 = 0\r\n *  n * N = N\r\n *  n * I = I\r\n *  0 * n = 0\r\n *  0 * 0 = 0\r\n *  0 * N = N\r\n *  0 * I = N\r\n *  N * n = N\r\n *  N * 0 = N\r\n *  N * N = N\r\n *  N * I = N\r\n *  I * n = I\r\n *  I * 0 = N\r\n *  I * N = N\r\n *  I * I = I\r\n *\r\n * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.times = P.mul = function (y) {\r\n  var carry, e, i, k, r, rL, t, xdL, ydL,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    xd = x.d,\r\n    yd = (y = new Ctor(y)).d;\r\n\r\n  y.s *= x.s;\r\n\r\n   // If either is NaN, \u00B1Infinity or \u00B10...\r\n  if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n    return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\r\n\r\n      // Return NaN if either is NaN.\r\n      // Return NaN if x is \u00B10 and y is \u00B1Infinity, or y is \u00B10 and x is \u00B1Infinity.\r\n      ? NaN\r\n\r\n      // Return \u00B1Infinity if either is \u00B1Infinity.\r\n      // Return \u00B10 if either is \u00B10.\r\n      : !xd || !yd ? y.s / 0 : y.s * 0);\r\n  }\r\n\r\n  e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\r\n  xdL = xd.length;\r\n  ydL = yd.length;\r\n\r\n  // Ensure xd points to the longer array.\r\n  if (xdL < ydL) {\r\n    r = xd;\r\n    xd = yd;\r\n    yd = r;\r\n    rL = xdL;\r\n    xdL = ydL;\r\n    ydL = rL;\r\n  }\r\n\r\n  // Initialise the result array with zeros.\r\n  r = [];\r\n  rL = xdL + ydL;\r\n  for (i = rL; i--;) r.push(0);\r\n\r\n  // Multiply!\r\n  for (i = ydL; --i >= 0;) {\r\n    carry = 0;\r\n    for (k = xdL + i; k > i;) {\r\n      t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n      r[k--] = t % BASE | 0;\r\n      carry = t / BASE | 0;\r\n    }\r\n\r\n    r[k] = (r[k] + carry) % BASE | 0;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; !r[--rL];) r.pop();\r\n\r\n  if (carry) ++e;\r\n  else r.shift();\r\n\r\n  y.d = r;\r\n  y.e = getBase10Exponent(r, e);\r\n\r\n  return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toBinary = function (sd, rm) {\r\n  return toStringBinary(this, 2, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toDecimalPlaces = P.toDP = function (dp, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  x = new Ctor(x);\r\n  if (dp === void 0) return x;\r\n\r\n  checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n  if (rm === void 0) rm = Ctor.rounding;\r\n  else checkInt32(rm, 0, 8);\r\n\r\n  return finalise(x, dp + x.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toExponential = function (dp, rm) {\r\n  var str,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (dp === void 0) {\r\n    str = finiteToString(x, true);\r\n  } else {\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    x = finalise(new Ctor(x), dp + 1, rm);\r\n    str = finiteToString(x, true, dp + 1);\r\n  }\r\n\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\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 * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\nP.toFixed = function (dp, rm) {\r\n  var str, y,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (dp === void 0) {\r\n    str = finiteToString(x);\r\n  } else {\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    y = finalise(new Ctor(x), dp + x.e + 1, rm);\r\n    str = finiteToString(y, false, dp + y.e + 1);\r\n  }\r\n\r\n  // To determine whether to add the minus sign look at the value before it was rounded,\r\n  // i.e. look at `x` rather than `y`.\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n * numerator and an integer denominator.\r\n *\r\n * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n * value necessary to represent the number exactly.\r\n *\r\n * [maxD] {number|string|bigint|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n *\r\n */\r\nP.toFraction = function (maxD) {\r\n  var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\r\n    x = this,\r\n    xd = x.d,\r\n    Ctor = x.constructor;\r\n\r\n  if (!xd) return new Ctor(x);\r\n\r\n  n1 = d0 = new Ctor(1);\r\n  d1 = n0 = new Ctor(0);\r\n\r\n  d = new Ctor(d1);\r\n  e = d.e = getPrecision(xd) - x.e - 1;\r\n  k = e % LOG_BASE;\r\n  d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\r\n\r\n  if (maxD == null) {\r\n\r\n    // d is 10**e, the minimum max-denominator needed.\r\n    maxD = e > 0 ? d : n1;\r\n  } else {\r\n    n = new Ctor(maxD);\r\n    if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\r\n    maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\r\n  }\r\n\r\n  external = false;\r\n  n = new Ctor(digitsToString(xd));\r\n  pr = Ctor.precision;\r\n  Ctor.precision = e = xd.length * LOG_BASE * 2;\r\n\r\n  for (;;)  {\r\n    q = divide(n, d, 0, 1, 1);\r\n    d2 = d0.plus(q.times(d1));\r\n    if (d2.cmp(maxD) == 1) break;\r\n    d0 = d1;\r\n    d1 = d2;\r\n    d2 = n1;\r\n    n1 = n0.plus(q.times(d2));\r\n    n0 = d2;\r\n    d2 = d;\r\n    d = n.minus(q.times(d2));\r\n    n = d2;\r\n  }\r\n\r\n  d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\r\n  n0 = n0.plus(d2.times(n1));\r\n  d0 = d0.plus(d2.times(d1));\r\n  n0.s = n1.s = x.s;\r\n\r\n  // Determine which fraction is closer to x, n0/d0 or n1/d1?\r\n  r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\r\n      ? [n1, d1] : [n0, d0];\r\n\r\n  Ctor.precision = pr;\r\n  external = true;\r\n\r\n  return r;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toHexadecimal = P.toHex = function (sd, rm) {\r\n  return toStringBinary(this, 16, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n *\r\n * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n * or `y` is NaN, in which case the return value will be also be NaN.\r\n *\r\n * The return value is not affected by the value of `precision`.\r\n *\r\n * y {number|string|bigint|Decimal} The magnitude to round to a multiple of.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toNearest() rounding mode not an integer: {rm}'\r\n * 'toNearest() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toNearest = function (y, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  x = new Ctor(x);\r\n\r\n  if (y == null) {\r\n\r\n    // If x is not finite, return x.\r\n    if (!x.d) return x;\r\n\r\n    y = new Ctor(1);\r\n    rm = Ctor.rounding;\r\n  } else {\r\n    y = new Ctor(y);\r\n    if (rm === void 0) {\r\n      rm = Ctor.rounding;\r\n    } else {\r\n      checkInt32(rm, 0, 8);\r\n    }\r\n\r\n    // If x is not finite, return x if y is not NaN, else NaN.\r\n    if (!x.d) return y.s ? x : y;\r\n\r\n    // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\r\n    if (!y.d) {\r\n      if (y.s) y.s = x.s;\r\n      return y;\r\n    }\r\n  }\r\n\r\n  // If y is not zero, calculate the nearest multiple of y to x.\r\n  if (y.d[0]) {\r\n    external = false;\r\n    x = divide(x, y, 0, rm, 1).times(y);\r\n    external = true;\r\n    finalise(x);\r\n\r\n  // If y is zero, return zero with the sign of x.\r\n  } else {\r\n    y.s = x.s;\r\n    x = y;\r\n  }\r\n\r\n  return x;\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n * Zero keeps its sign.\r\n *\r\n */\r\nP.toNumber = function () {\r\n  return +this;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toOctal = function (sd, rm) {\r\n  return toStringBinary(this, 8, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n * to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * ECMAScript compliant.\r\n *\r\n *   pow(x, NaN)                           = NaN\r\n *   pow(x, \u00B10)                            = 1\r\n\r\n *   pow(NaN, non-zero)                    = NaN\r\n *   pow(abs(x) > 1, +Infinity)            = +Infinity\r\n *   pow(abs(x) > 1, -Infinity)            = +0\r\n *   pow(abs(x) == 1, \u00B1Infinity)           = NaN\r\n *   pow(abs(x) < 1, +Infinity)            = +0\r\n *   pow(abs(x) < 1, -Infinity)            = +Infinity\r\n *   pow(+Infinity, y > 0)                 = +Infinity\r\n *   pow(+Infinity, y < 0)                 = +0\r\n *   pow(-Infinity, odd integer > 0)       = -Infinity\r\n *   pow(-Infinity, even integer > 0)      = +Infinity\r\n *   pow(-Infinity, odd integer < 0)       = -0\r\n *   pow(-Infinity, even integer < 0)      = +0\r\n *   pow(+0, y > 0)                        = +0\r\n *   pow(+0, y < 0)                        = +Infinity\r\n *   pow(-0, odd integer > 0)              = -0\r\n *   pow(-0, even integer > 0)             = +0\r\n *   pow(-0, odd integer < 0)              = -Infinity\r\n *   pow(-0, even integer < 0)             = +Infinity\r\n *   pow(finite x < 0, finite non-integer) = NaN\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n *   x^y = exp(y*ln(x))\r\n *\r\n * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n * probability of an incorrectly rounded result\r\n * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n * i.e. 1 in 250,000,000,000,000\r\n *\r\n * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n *\r\n * y {number|string|bigint|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\nP.toPower = P.pow = function (y) {\r\n  var e, k, pr, r, rm, s,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    yn = +(y = new Ctor(y));\r\n\r\n  // Either \u00B1Infinity, NaN or \u00B10?\r\n  if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\r\n\r\n  x = new Ctor(x);\r\n\r\n  if (x.eq(1)) return x;\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  if (y.eq(1)) return finalise(x, pr, rm);\r\n\r\n  // y exponent\r\n  e = mathfloor(y.e / LOG_BASE);\r\n\r\n  // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n  if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n    r = intPow(Ctor, x, k, pr);\r\n    return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\r\n  }\r\n\r\n  s = x.s;\r\n\r\n  // if x is negative\r\n  if (s < 0) {\r\n\r\n    // if y is not an integer\r\n    if (e < y.d.length - 1) return new Ctor(NaN);\r\n\r\n    // Result is positive if x is negative and the last digit of integer y is even.\r\n    if ((y.d[e] & 1) == 0) s = 1;\r\n\r\n    // if x.eq(-1)\r\n    if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\r\n      x.s = s;\r\n      return x;\r\n    }\r\n  }\r\n\r\n  // Estimate result exponent.\r\n  // x^y = 10^e,  where e = y * log10(x)\r\n  // log10(x) = log10(x_significand) + x_exponent\r\n  // log10(x_significand) = ln(x_significand) / ln(10)\r\n  k = mathpow(+x, yn);\r\n  e = k == 0 || !isFinite(k)\r\n    ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\r\n    : new Ctor(k + '').e;\r\n\r\n  // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\r\n\r\n  // Overflow/underflow?\r\n  if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\r\n\r\n  external = false;\r\n  Ctor.rounding = x.s = 1;\r\n\r\n  // Estimate the extra guard digits needed to ensure five correct rounding digits from\r\n  // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\r\n  // new Decimal(2.32456).pow('2087987436534566.46411')\r\n  // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\r\n  k = Math.min(12, (e + '').length);\r\n\r\n  // r = x^y = exp(y*ln(x))\r\n  r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\r\n\r\n  // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\r\n  if (r.d) {\r\n\r\n    // Truncate to the required precision plus five rounding digits.\r\n    r = finalise(r, pr + 5, 1);\r\n\r\n    // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\r\n    // the result.\r\n    if (checkRoundingDigits(r.d, pr, rm)) {\r\n      e = pr + 10;\r\n\r\n      // Truncate to the increased precision plus five rounding digits.\r\n      r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\r\n\r\n      // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\r\n      if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\r\n        r = finalise(r, pr + 1, 0);\r\n      }\r\n    }\r\n  }\r\n\r\n  r.s = s;\r\n  external = true;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return 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_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n  var str,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (sd === void 0) {\r\n    str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n  } else {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    x = finalise(new Ctor(x), sd, rm);\r\n    str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\r\n  }\r\n\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toSD() digits out of range: {sd}'\r\n * 'toSD() digits not an integer: {sd}'\r\n * 'toSD() rounding mode not an integer: {rm}'\r\n * 'toSD() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toSignificantDigits = P.toSD = function (sd, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (sd === void 0) {\r\n    sd = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n  } else {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n  }\r\n\r\n  return finalise(new Ctor(x), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\nP.toString = function () {\r\n  var x = this,\r\n    Ctor = x.constructor,\r\n    str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n *\r\n */\r\nP.truncated = P.trunc = function () {\r\n  return finalise(new this.constructor(this), this.e + 1, 1);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n * Unlike `toString`, negative zero will include the minus sign.\r\n *\r\n */\r\nP.valueOf = P.toJSON = function () {\r\n  var x = this,\r\n    Ctor = x.constructor,\r\n    str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n  return x.isNeg() ? '-' + str : str;\r\n};\r\n\r\n\r\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n/*\r\n *  digitsToString           P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n *                           finiteToString, naturalExponential, naturalLogarithm\r\n *  checkInt32               P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n *                           P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n *  checkRoundingDigits      P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n *  convertBase              toStringBinary, parseOther\r\n *  cos                      P.cos\r\n *  divide                   P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n *                           P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n *                           P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n *                           taylorSeries, atan2, parseOther\r\n *  finalise                 P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n *                           P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n *                           P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n *                           P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n *                           P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n *                           P.truncated, divide, getLn10, getPi, naturalExponential,\r\n *                           naturalLogarithm, ceil, floor, round, trunc\r\n *  finiteToString           P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n *                           toStringBinary\r\n *  getBase10Exponent        P.minus, P.plus, P.times, parseOther\r\n *  getLn10                  P.logarithm, naturalLogarithm\r\n *  getPi                    P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n *  getPrecision             P.precision, P.toFraction\r\n *  getZeroString            digitsToString, finiteToString\r\n *  intPow                   P.toPower, parseOther\r\n *  isOdd                    toLessThanHalfPi\r\n *  maxOrMin                 max, min\r\n *  naturalExponential       P.naturalExponential, P.toPower\r\n *  naturalLogarithm         P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n *                           P.toPower, naturalExponential\r\n *  nonFiniteToString        finiteToString, toStringBinary\r\n *  parseDecimal             Decimal\r\n *  parseOther               Decimal\r\n *  sin                      P.sin\r\n *  taylorSeries             P.cosh, P.sinh, cos, sin\r\n *  toLessThanHalfPi         P.cos, P.sin\r\n *  toStringBinary           P.toBinary, P.toHexadecimal, P.toOctal\r\n *  truncate                 intPow\r\n *\r\n *  Throws:                  P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n *                           naturalLogarithm, config, parseOther, random, Decimal\r\n */\r\n\r\n\r\nfunction digitsToString(d) {\r\n  var i, k, ws,\r\n    indexOfLastWord = d.length - 1,\r\n    str = '',\r\n    w = d[0];\r\n\r\n  if (indexOfLastWord > 0) {\r\n    str += w;\r\n    for (i = 1; i < indexOfLastWord; i++) {\r\n      ws = d[i] + '';\r\n      k = LOG_BASE - ws.length;\r\n      if (k) str += getZeroString(k);\r\n      str += ws;\r\n    }\r\n\r\n    w = d[i];\r\n    ws = w + '';\r\n    k = LOG_BASE - ws.length;\r\n    if (k) str += getZeroString(k);\r\n  } else if (w === 0) {\r\n    return '0';\r\n  }\r\n\r\n  // Remove trailing zeros of last w.\r\n  for (; w % 10 === 0;) w /= 10;\r\n\r\n  return str + w;\r\n}\r\n\r\n\r\nfunction checkInt32(i, min, max) {\r\n  if (i !== ~~i || i < min || i > max) {\r\n    throw Error(invalidArgument + i);\r\n  }\r\n}\r\n\r\n\r\n/*\r\n * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n * `repeating == null` if caller is `log` or `pow`,\r\n * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n */\r\nfunction checkRoundingDigits(d, i, rm, repeating) {\r\n  var di, k, r, rd;\r\n\r\n  // Get the length of the first word of the array d.\r\n  for (k = d[0]; k >= 10; k /= 10) --i;\r\n\r\n  // Is the rounding digit in the first word of d?\r\n  if (--i < 0) {\r\n    i += LOG_BASE;\r\n    di = 0;\r\n  } else {\r\n    di = Math.ceil((i + 1) / LOG_BASE);\r\n    i %= LOG_BASE;\r\n  }\r\n\r\n  // i is the index (0 - 6) of the rounding digit.\r\n  // E.g. if within the word 3487563 the first rounding digit is 5,\r\n  // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\r\n  k = mathpow(10, LOG_BASE - i);\r\n  rd = d[di] % k | 0;\r\n\r\n  if (repeating == null) {\r\n    if (i < 3) {\r\n      if (i == 0) rd = rd / 100 | 0;\r\n      else if (i == 1) rd = rd / 10 | 0;\r\n      r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\r\n    } else {\r\n      r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\r\n        (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\r\n          (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\r\n    }\r\n  } else {\r\n    if (i < 4) {\r\n      if (i == 0) rd = rd / 1000 | 0;\r\n      else if (i == 1) rd = rd / 100 | 0;\r\n      else if (i == 2) rd = rd / 10 | 0;\r\n      r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\r\n    } else {\r\n      r = ((repeating || rm < 4) && rd + 1 == k ||\r\n      (!repeating && rm > 3) && rd + 1 == k / 2) &&\r\n        (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\r\n    }\r\n  }\r\n\r\n  return r;\r\n}\r\n\r\n\r\n// Convert string of `baseIn` to an array of numbers of `baseOut`.\r\n// Eg. convertBase('255', 10, 16) returns [15, 15].\r\n// Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\r\nfunction convertBase(str, baseIn, baseOut) {\r\n  var j,\r\n    arr = [0],\r\n    arrL,\r\n    i = 0,\r\n    strL = str.length;\r\n\r\n  for (; i < strL;) {\r\n    for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\r\n    arr[0] += NUMERALS.indexOf(str.charAt(i++));\r\n    for (j = 0; j < arr.length; j++) {\r\n      if (arr[j] > baseOut - 1) {\r\n        if (arr[j + 1] === void 0) arr[j + 1] = 0;\r\n        arr[j + 1] += arr[j] / baseOut | 0;\r\n        arr[j] %= baseOut;\r\n      }\r\n    }\r\n  }\r\n\r\n  return arr.reverse();\r\n}\r\n\r\n\r\n/*\r\n * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction cosine(Ctor, x) {\r\n  var k, len, y;\r\n\r\n  if (x.isZero()) return x;\r\n\r\n  // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\r\n  // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\r\n\r\n  // Estimate the optimum number of times to use the argument reduction.\r\n  len = x.d.length;\r\n  if (len < 32) {\r\n    k = Math.ceil(len / 3);\r\n    y = (1 / tinyPow(4, k)).toString();\r\n  } else {\r\n    k = 16;\r\n    y = '2.3283064365386962890625e-10';\r\n  }\r\n\r\n  Ctor.precision += k;\r\n\r\n  x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\r\n\r\n  // Reverse argument reduction\r\n  for (var i = k; i--;) {\r\n    var cos2x = x.times(x);\r\n    x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\r\n  }\r\n\r\n  Ctor.precision -= k;\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Perform division in the specified base.\r\n */\r\nvar divide = (function () {\r\n\r\n  // Assumes non-zero x and k, and hence non-zero result.\r\n  function multiplyInteger(x, k, base) {\r\n    var temp,\r\n      carry = 0,\r\n      i = x.length;\r\n\r\n    for (x = x.slice(); i--;) {\r\n      temp = x[i] * k + carry;\r\n      x[i] = temp % base | 0;\r\n      carry = temp / base | 0;\r\n    }\r\n\r\n    if (carry) x.unshift(carry);\r\n\r\n    return x;\r\n  }\r\n\r\n  function compare(a, b, aL, bL) {\r\n    var i, r;\r\n\r\n    if (aL != bL) {\r\n      r = aL > bL ? 1 : -1;\r\n    } else {\r\n      for (i = r = 0; i < aL; i++) {\r\n        if (a[i] != b[i]) {\r\n          r = a[i] > b[i] ? 1 : -1;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    return r;\r\n  }\r\n\r\n  function subtract(a, b, aL, base) {\r\n    var i = 0;\r\n\r\n    // Subtract b from a.\r\n    for (; aL--;) {\r\n      a[aL] -= i;\r\n      i = a[aL] < b[aL] ? 1 : 0;\r\n      a[aL] = i * base + a[aL] - b[aL];\r\n    }\r\n\r\n    // Remove leading zeros.\r\n    for (; !a[0] && a.length > 1;) a.shift();\r\n  }\r\n\r\n  return function (x, y, pr, rm, dp, base) {\r\n    var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\r\n      yL, yz,\r\n      Ctor = x.constructor,\r\n      sign = x.s == y.s ? 1 : -1,\r\n      xd = x.d,\r\n      yd = y.d;\r\n\r\n    // Either NaN, Infinity or 0?\r\n    if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n      return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\r\n        !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\r\n\r\n        // Return \u00B10 if x is 0 or y is \u00B1Infinity, or return \u00B1Infinity as y is 0.\r\n        xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\r\n    }\r\n\r\n    if (base) {\r\n      logBase = 1;\r\n      e = x.e - y.e;\r\n    } else {\r\n      base = BASE;\r\n      logBase = LOG_BASE;\r\n      e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\r\n    }\r\n\r\n    yL = yd.length;\r\n    xL = xd.length;\r\n    q = new Ctor(sign);\r\n    qd = q.d = [];\r\n\r\n    // Result exponent may be one less than e.\r\n    // The digit array of a Decimal from toStringBinary may have trailing zeros.\r\n    for (i = 0; yd[i] == (xd[i] || 0); i++);\r\n\r\n    if (yd[i] > (xd[i] || 0)) e--;\r\n\r\n    if (pr == null) {\r\n      sd = pr = Ctor.precision;\r\n      rm = Ctor.rounding;\r\n    } else if (dp) {\r\n      sd = pr + (x.e - y.e) + 1;\r\n    } else {\r\n      sd = pr;\r\n    }\r\n\r\n    if (sd < 0) {\r\n      qd.push(1);\r\n      more = true;\r\n    } else {\r\n\r\n      // Convert precision in number of base 10 digits to base 1e7 digits.\r\n      sd = sd / logBase + 2 | 0;\r\n      i = 0;\r\n\r\n      // divisor < 1e7\r\n      if (yL == 1) {\r\n        k = 0;\r\n        yd = yd[0];\r\n        sd++;\r\n\r\n        // k is the carry.\r\n        for (; (i < xL || k) && sd--; i++) {\r\n          t = k * base + (xd[i] || 0);\r\n          qd[i] = t / yd | 0;\r\n          k = t % yd | 0;\r\n        }\r\n\r\n        more = k || i < xL;\r\n\r\n      // divisor >= 1e7\r\n      } else {\r\n\r\n        // Normalise xd and yd so highest order digit of yd is >= base/2\r\n        k = base / (yd[0] + 1) | 0;\r\n\r\n        if (k > 1) {\r\n          yd = multiplyInteger(yd, k, base);\r\n          xd = multiplyInteger(xd, k, base);\r\n          yL = yd.length;\r\n          xL = xd.length;\r\n        }\r\n\r\n        xi = yL;\r\n        rem = xd.slice(0, yL);\r\n        remL = rem.length;\r\n\r\n        // Add zeros to make remainder as long as divisor.\r\n        for (; remL < yL;) rem[remL++] = 0;\r\n\r\n        yz = yd.slice();\r\n        yz.unshift(0);\r\n        yd0 = yd[0];\r\n\r\n        if (yd[1] >= base / 2) ++yd0;\r\n\r\n        do {\r\n          k = 0;\r\n\r\n          // Compare divisor and remainder.\r\n          cmp = compare(yd, rem, yL, remL);\r\n\r\n          // If divisor < remainder.\r\n          if (cmp < 0) {\r\n\r\n            // Calculate trial digit, k.\r\n            rem0 = rem[0];\r\n            if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n            // k will be how many times the divisor goes into the current remainder.\r\n            k = rem0 / yd0 | 0;\r\n\r\n            //  Algorithm:\r\n            //  1. product = divisor * trial digit (k)\r\n            //  2. if product > remainder: product -= divisor, k--\r\n            //  3. remainder -= product\r\n            //  4. if product was < remainder at 2:\r\n            //    5. compare new remainder and divisor\r\n            //    6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n            if (k > 1) {\r\n              if (k >= base) k = base - 1;\r\n\r\n              // product = divisor * trial digit.\r\n              prod = multiplyInteger(yd, k, base);\r\n              prodL = prod.length;\r\n              remL = rem.length;\r\n\r\n              // Compare product and remainder.\r\n              cmp = compare(prod, rem, prodL, remL);\r\n\r\n              // product > remainder.\r\n              if (cmp == 1) {\r\n                k--;\r\n\r\n                // Subtract divisor from product.\r\n                subtract(prod, yL < prodL ? yz : yd, prodL, base);\r\n              }\r\n            } else {\r\n\r\n              // cmp is -1.\r\n              // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n              // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n              if (k == 0) cmp = k = 1;\r\n              prod = yd.slice();\r\n            }\r\n\r\n            prodL = prod.length;\r\n            if (prodL < remL) prod.unshift(0);\r\n\r\n            // Subtract product from remainder.\r\n            subtract(rem, prod, remL, base);\r\n\r\n            // If product was < previous remainder.\r\n            if (cmp == -1) {\r\n              remL = rem.length;\r\n\r\n              // Compare divisor and new remainder.\r\n              cmp = compare(yd, rem, yL, remL);\r\n\r\n              // If divisor < new remainder, subtract divisor from remainder.\r\n              if (cmp < 1) {\r\n                k++;\r\n\r\n                // Subtract divisor from remainder.\r\n                subtract(rem, yL < remL ? yz : yd, remL, base);\r\n              }\r\n            }\r\n\r\n            remL = rem.length;\r\n          } else if (cmp === 0) {\r\n            k++;\r\n            rem = [0];\r\n          }    // if cmp === 1, k will be 0\r\n\r\n          // Add the next digit, k, to the result array.\r\n          qd[i++] = k;\r\n\r\n          // Update the remainder.\r\n          if (cmp && rem[0]) {\r\n            rem[remL++] = xd[xi] || 0;\r\n          } else {\r\n            rem = [xd[xi]];\r\n            remL = 1;\r\n          }\r\n\r\n        } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n\r\n        more = rem[0] !== void 0;\r\n      }\r\n\r\n      // Leading zero?\r\n      if (!qd[0]) qd.shift();\r\n    }\r\n\r\n    // logBase is 1 when divide is being used for base conversion.\r\n    if (logBase == 1) {\r\n      q.e = e;\r\n      inexact = more;\r\n    } else {\r\n\r\n      // To calculate q.e, first get the number of digits of qd[0].\r\n      for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\r\n      q.e = i + e * logBase - 1;\r\n\r\n      finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\r\n    }\r\n\r\n    return q;\r\n  };\r\n})();\r\n\r\n\r\n/*\r\n * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n * Check for over/under-flow.\r\n */\r\n function finalise(x, sd, rm, isTruncated) {\r\n  var digits, i, j, k, rd, roundUp, w, xd, xdi,\r\n    Ctor = x.constructor;\r\n\r\n  // Don't round if sd is null or undefined.\r\n  out: if (sd != null) {\r\n    xd = x.d;\r\n\r\n    // Infinity/NaN.\r\n    if (!xd) return x;\r\n\r\n    // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n    // w: the word of xd containing rd, a base 1e7 number.\r\n    // xdi: the index of w within xd.\r\n    // digits: the number of digits of w.\r\n    // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n    // they had leading zeros)\r\n    // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n    // Get the length of the first word of the digits array xd.\r\n    for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\r\n    i = sd - digits;\r\n\r\n    // Is the rounding digit in the first word of xd?\r\n    if (i < 0) {\r\n      i += LOG_BASE;\r\n      j = sd;\r\n      w = xd[xdi = 0];\r\n\r\n      // Get the rounding digit at index j of w.\r\n      rd = w / mathpow(10, digits - j - 1) % 10 | 0;\r\n    } else {\r\n      xdi = Math.ceil((i + 1) / LOG_BASE);\r\n      k = xd.length;\r\n      if (xdi >= k) {\r\n        if (isTruncated) {\r\n\r\n          // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\r\n          for (; k++ <= xdi;) xd.push(0);\r\n          w = rd = 0;\r\n          digits = 1;\r\n          i %= LOG_BASE;\r\n          j = i - LOG_BASE + 1;\r\n        } else {\r\n          break out;\r\n        }\r\n      } else {\r\n        w = k = xd[xdi];\r\n\r\n        // Get the number of digits of w.\r\n        for (digits = 1; k >= 10; k /= 10) digits++;\r\n\r\n        // Get the index of rd within w.\r\n        i %= LOG_BASE;\r\n\r\n        // Get the index of rd within w, adjusted for leading zeros.\r\n        // The number of leading zeros of w is given by LOG_BASE - digits.\r\n        j = i - LOG_BASE + digits;\r\n\r\n        // Get the rounding digit at index j of w.\r\n        rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\r\n      }\r\n    }\r\n\r\n    // Are there any non-zero digits after the rounding digit?\r\n    isTruncated = isTruncated || sd < 0 ||\r\n      xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\r\n\r\n    // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\r\n    // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\r\n    // will give 714.\r\n\r\n    roundUp = rm < 4\r\n      ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n      : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\r\n\r\n        // Check whether the digit to the left of the rounding digit is odd.\r\n        ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n          rm == (x.s < 0 ? 8 : 7));\r\n\r\n    if (sd < 1 || !xd[0]) {\r\n      xd.length = 0;\r\n      if (roundUp) {\r\n\r\n        // Convert sd to decimal places.\r\n        sd -= x.e + 1;\r\n\r\n        // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n        xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n        x.e = -sd || 0;\r\n      } else {\r\n\r\n        // Zero.\r\n        xd[0] = x.e = 0;\r\n      }\r\n\r\n      return x;\r\n    }\r\n\r\n    // Remove excess digits.\r\n    if (i == 0) {\r\n      xd.length = xdi;\r\n      k = 1;\r\n      xdi--;\r\n    } else {\r\n      xd.length = xdi + 1;\r\n      k = mathpow(10, LOG_BASE - i);\r\n\r\n      // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n      // j > 0 means i > number of leading zeros of w.\r\n      xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\r\n    }\r\n\r\n    if (roundUp) {\r\n      for (;;) {\r\n\r\n        // Is the digit to be rounded up in the first word of xd?\r\n        if (xdi == 0) {\r\n\r\n          // i will be the length of xd[0] before k is added.\r\n          for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\r\n          j = xd[0] += k;\r\n          for (k = 1; j >= 10; j /= 10) k++;\r\n\r\n          // if i != k the length has increased.\r\n          if (i != k) {\r\n            x.e++;\r\n            if (xd[0] == BASE) xd[0] = 1;\r\n          }\r\n\r\n          break;\r\n        } else {\r\n          xd[xdi] += k;\r\n          if (xd[xdi] != BASE) break;\r\n          xd[xdi--] = 0;\r\n          k = 1;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n  }\r\n\r\n  if (external) {\r\n\r\n    // Overflow?\r\n    if (x.e > Ctor.maxE) {\r\n\r\n      // Infinity.\r\n      x.d = null;\r\n      x.e = NaN;\r\n\r\n    // Underflow?\r\n    } else if (x.e < Ctor.minE) {\r\n\r\n      // Zero.\r\n      x.e = 0;\r\n      x.d = [0];\r\n      // Ctor.underflow = true;\r\n    } // else Ctor.underflow = false;\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\nfunction finiteToString(x, isExp, sd) {\r\n  if (!x.isFinite()) return nonFiniteToString(x);\r\n  var k,\r\n    e = x.e,\r\n    str = digitsToString(x.d),\r\n    len = str.length;\r\n\r\n  if (isExp) {\r\n    if (sd && (k = sd - len) > 0) {\r\n      str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n    } else if (len > 1) {\r\n      str = str.charAt(0) + '.' + str.slice(1);\r\n    }\r\n\r\n    str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\r\n  } else if (e < 0) {\r\n    str = '0.' + getZeroString(-e - 1) + str;\r\n    if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n  } else if (e >= len) {\r\n    str += getZeroString(e + 1 - len);\r\n    if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n  } else {\r\n    if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n    if (sd && (k = sd - len) > 0) {\r\n      if (e + 1 === len) str += '.';\r\n      str += getZeroString(k);\r\n    }\r\n  }\r\n\r\n  return str;\r\n}\r\n\r\n\r\n// Calculate the base 10 exponent from the base 1e7 exponent.\r\nfunction getBase10Exponent(digits, e) {\r\n  var w = digits[0];\r\n\r\n  // Add the number of digits of the first word of the digits array.\r\n  for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\r\n  return e;\r\n}\r\n\r\n\r\nfunction getLn10(Ctor, sd, pr) {\r\n  if (sd > LN10_PRECISION) {\r\n\r\n    // Reset global state in case the exception is caught.\r\n    external = true;\r\n    if (pr) Ctor.precision = pr;\r\n    throw Error(precisionLimitExceeded);\r\n  }\r\n  return finalise(new Ctor(LN10), sd, 1, true);\r\n}\r\n\r\n\r\nfunction getPi(Ctor, sd, rm) {\r\n  if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\r\n  return finalise(new Ctor(PI), sd, rm, true);\r\n}\r\n\r\n\r\nfunction getPrecision(digits) {\r\n  var w = digits.length - 1,\r\n    len = w * LOG_BASE + 1;\r\n\r\n  w = digits[w];\r\n\r\n  // If non-zero...\r\n  if (w) {\r\n\r\n    // Subtract the number of trailing zeros of the last word.\r\n    for (; w % 10 == 0; w /= 10) len--;\r\n\r\n    // Add the number of digits of the first word.\r\n    for (w = digits[0]; w >= 10; w /= 10) len++;\r\n  }\r\n\r\n  return len;\r\n}\r\n\r\n\r\nfunction getZeroString(k) {\r\n  var zs = '';\r\n  for (; k--;) zs += '0';\r\n  return zs;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n * integer of type number.\r\n *\r\n * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n *\r\n */\r\nfunction intPow(Ctor, x, n, pr) {\r\n  var isTruncated,\r\n    r = new Ctor(1),\r\n\r\n    // Max n of 9007199254740991 takes 53 loop iterations.\r\n    // Maximum digits array length; leaves [28, 34] guard digits.\r\n    k = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n  external = false;\r\n\r\n  for (;;) {\r\n    if (n % 2) {\r\n      r = r.times(x);\r\n      if (truncate(r.d, k)) isTruncated = true;\r\n    }\r\n\r\n    n = mathfloor(n / 2);\r\n    if (n === 0) {\r\n\r\n      // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\r\n      n = r.d.length - 1;\r\n      if (isTruncated && r.d[n] === 0) ++r.d[n];\r\n      break;\r\n    }\r\n\r\n    x = x.times(x);\r\n    truncate(x.d, k);\r\n  }\r\n\r\n  external = true;\r\n\r\n  return r;\r\n}\r\n\r\n\r\nfunction isOdd(n) {\r\n  return n.d[n.d.length - 1] & 1;\r\n}\r\n\r\n\r\n/*\r\n * Handle `max` (`n` is -1) and `min` (`n` is 1).\r\n */\r\nfunction maxOrMin(Ctor, args, n) {\r\n  var k, y,\r\n    x = new Ctor(args[0]),\r\n    i = 0;\r\n\r\n  for (; ++i < args.length;) {\r\n    y = new Ctor(args[i]);\r\n\r\n    // NaN?\r\n    if (!y.s) {\r\n      x = y;\r\n      break;\r\n    }\r\n\r\n    k = x.cmp(y);\r\n\r\n    if (k === n || k === 0 && x.s === n) {\r\n      x = y;\r\n    }\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n *   Repeat x = x / 32, k += 5, until |x| < 0.1\r\n *   exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n *  exp(Infinity)  = Infinity\r\n *  exp(-Infinity) = 0\r\n *  exp(NaN)       = NaN\r\n *  exp(\u00B10)        = 1\r\n *\r\n *  exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n *  The result will always be correctly rounded.\r\n *\r\n */\r\nfunction naturalExponential(x, sd) {\r\n  var denominator, guard, j, pow, sum, t, wpr,\r\n    rep = 0,\r\n    i = 0,\r\n    k = 0,\r\n    Ctor = x.constructor,\r\n    rm = Ctor.rounding,\r\n    pr = Ctor.precision;\r\n\r\n  // 0/NaN/Infinity?\r\n  if (!x.d || !x.d[0] || x.e > 17) {\r\n\r\n    return new Ctor(x.d\r\n      ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\r\n      : x.s ? x.s < 0 ? 0 : x : 0 / 0);\r\n  }\r\n\r\n  if (sd == null) {\r\n    external = false;\r\n    wpr = pr;\r\n  } else {\r\n    wpr = sd;\r\n  }\r\n\r\n  t = new Ctor(0.03125);\r\n\r\n  // while abs(x) >= 0.1\r\n  while (x.e > -2) {\r\n\r\n    // x = x / 2^5\r\n    x = x.times(t);\r\n    k += 5;\r\n  }\r\n\r\n  // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\r\n  // necessary to ensure the first 4 rounding digits are correct.\r\n  guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n  wpr += guard;\r\n  denominator = pow = sum = new Ctor(1);\r\n  Ctor.precision = wpr;\r\n\r\n  for (;;) {\r\n    pow = finalise(pow.times(x), wpr, 1);\r\n    denominator = denominator.times(++i);\r\n    t = sum.plus(divide(pow, denominator, wpr, 1));\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n      j = k;\r\n      while (j--) sum = finalise(sum.times(sum), wpr, 1);\r\n\r\n      // Check to see if the first 4 rounding digits are [49]999.\r\n      // If so, repeat the summation with a higher precision, otherwise\r\n      // e.g. with precision: 18, rounding: 1\r\n      // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\r\n      // `wpr - guard` is the index of first rounding digit.\r\n      if (sd == null) {\r\n\r\n        if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n          Ctor.precision = wpr += 10;\r\n          denominator = pow = t = new Ctor(1);\r\n          i = 0;\r\n          rep++;\r\n        } else {\r\n          return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n        }\r\n      } else {\r\n        Ctor.precision = pr;\r\n        return sum;\r\n      }\r\n    }\r\n\r\n    sum = t;\r\n  }\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n *  ln(-n)        = NaN\r\n *  ln(0)         = -Infinity\r\n *  ln(-0)        = -Infinity\r\n *  ln(1)         = 0\r\n *  ln(Infinity)  = Infinity\r\n *  ln(-Infinity) = NaN\r\n *  ln(NaN)       = NaN\r\n *\r\n *  ln(n) (n != 1) is non-terminating.\r\n *\r\n */\r\nfunction naturalLogarithm(y, sd) {\r\n  var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\r\n    n = 1,\r\n    guard = 10,\r\n    x = y,\r\n    xd = x.d,\r\n    Ctor = x.constructor,\r\n    rm = Ctor.rounding,\r\n    pr = Ctor.precision;\r\n\r\n  // Is x negative or Infinity, NaN, 0 or 1?\r\n  if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\r\n    return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\r\n  }\r\n\r\n  if (sd == null) {\r\n    external = false;\r\n    wpr = pr;\r\n  } else {\r\n    wpr = sd;\r\n  }\r\n\r\n  Ctor.precision = wpr += guard;\r\n  c = digitsToString(xd);\r\n  c0 = c.charAt(0);\r\n\r\n  if (Math.abs(e = x.e) < 1.5e15) {\r\n\r\n    // Argument reduction.\r\n    // The series converges faster the closer the argument is to 1, so using\r\n    // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b\r\n    // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n    // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n    // later be divided by this number, then separate out the power of 10 using\r\n    // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n    // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n    //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n    // max n is 6 (gives 0.7 - 1.3)\r\n    while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n      x = x.times(y);\r\n      c = digitsToString(x.d);\r\n      c0 = c.charAt(0);\r\n      n++;\r\n    }\r\n\r\n    e = x.e;\r\n\r\n    if (c0 > 1) {\r\n      x = new Ctor('0.' + c);\r\n      e++;\r\n    } else {\r\n      x = new Ctor(c0 + '.' + c.slice(1));\r\n    }\r\n  } else {\r\n\r\n    // The argument reduction method above may result in overflow if the argument y is a massive\r\n    // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n    // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n    t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n    x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n    Ctor.precision = pr;\r\n\r\n    return sd == null ? finalise(x, pr, rm, external = true) : x;\r\n  }\r\n\r\n  // x1 is x reduced to a value near 1.\r\n  x1 = x;\r\n\r\n  // Taylor series.\r\n  // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n  // where x = (y - 1)/(y + 1)    (|x| < 1)\r\n  sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\r\n  x2 = finalise(x.times(x), wpr, 1);\r\n  denominator = 3;\r\n\r\n  for (;;) {\r\n    numerator = finalise(numerator.times(x2), wpr, 1);\r\n    t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n      sum = sum.times(2);\r\n\r\n      // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\r\n      // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\r\n      if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n      sum = divide(sum, new Ctor(n), wpr, 1);\r\n\r\n      // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\r\n      // been repeated previously) and the first 4 rounding digits 9999?\r\n      // If so, restart the summation with a higher precision, otherwise\r\n      // e.g. with precision: 12, rounding: 1\r\n      // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\r\n      // `wpr - guard` is the index of first rounding digit.\r\n      if (sd == null) {\r\n        if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n          Ctor.precision = wpr += guard;\r\n          t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\r\n          x2 = finalise(x.times(x), wpr, 1);\r\n          denominator = rep = 1;\r\n        } else {\r\n          return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n        }\r\n      } else {\r\n        Ctor.precision = pr;\r\n        return sum;\r\n      }\r\n    }\r\n\r\n    sum = t;\r\n    denominator += 2;\r\n  }\r\n}\r\n\r\n\r\n// \u00B1Infinity, NaN.\r\nfunction nonFiniteToString(x) {\r\n  // Unsigned.\r\n  return String(x.s * x.s / 0);\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\nfunction parseDecimal(x, str) {\r\n  var e, i, len;\r\n\r\n  // TODO BigInt str: no need to check for decimal point, exponential form or leading zeros.\r\n  // Decimal point?\r\n  if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n  // Exponential form?\r\n  if ((i = str.search(/e/i)) > 0) {\r\n\r\n    // Determine exponent.\r\n    if (e < 0) e = i;\r\n    e += +str.slice(i + 1);\r\n    str = str.substring(0, i);\r\n  } else if (e < 0) {\r\n\r\n    // Integer.\r\n    e = str.length;\r\n  }\r\n\r\n  // Determine leading zeros.\r\n  for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n  // Determine trailing zeros.\r\n  for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\r\n  str = str.slice(i, len);\r\n\r\n  if (str) {\r\n    len -= i;\r\n    x.e = e = e - i - 1;\r\n    x.d = [];\r\n\r\n    // Transform base\r\n\r\n    // e is the base 10 exponent.\r\n    // i is where to slice str to get the first word of the digits array.\r\n    i = (e + 1) % LOG_BASE;\r\n    if (e < 0) i += LOG_BASE;\r\n\r\n    if (i < len) {\r\n      if (i) x.d.push(+str.slice(0, i));\r\n      for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n      str = str.slice(i);\r\n      i = LOG_BASE - str.length;\r\n    } else {\r\n      i -= len;\r\n    }\r\n\r\n    for (; i--;) str += '0';\r\n    x.d.push(+str);\r\n\r\n    if (external) {\r\n\r\n      // Overflow?\r\n      if (x.e > x.constructor.maxE) {\r\n\r\n        // Infinity.\r\n        x.d = null;\r\n        x.e = NaN;\r\n\r\n      // Underflow?\r\n      } else if (x.e < x.constructor.minE) {\r\n\r\n        // Zero.\r\n        x.e = 0;\r\n        x.d = [0];\r\n        // x.constructor.underflow = true;\r\n      } // else x.constructor.underflow = false;\r\n    }\r\n  } else {\r\n\r\n    // Zero.\r\n    x.e = 0;\r\n    x.d = [0];\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n */\r\nfunction parseOther(x, str) {\r\n  var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\r\n\r\n  if (str.indexOf('_') > -1) {\r\n    str = str.replace(/(\\d)_(?=\\d)/g, '$1');\r\n    if (isDecimal.test(str)) return parseDecimal(x, str);\r\n  } else if (str === 'Infinity' || str === 'NaN') {\r\n    if (!+str) x.s = NaN;\r\n    x.e = NaN;\r\n    x.d = null;\r\n    return x;\r\n  }\r\n\r\n  if (isHex.test(str))  {\r\n    base = 16;\r\n    str = str.toLowerCase();\r\n  } else if (isBinary.test(str))  {\r\n    base = 2;\r\n  } else if (isOctal.test(str))  {\r\n    base = 8;\r\n  } else {\r\n    throw Error(invalidArgument + str);\r\n  }\r\n\r\n  // Is there a binary exponent part?\r\n  i = str.search(/p/i);\r\n\r\n  if (i > 0) {\r\n    p = +str.slice(i + 1);\r\n    str = str.substring(2, i);\r\n  } else {\r\n    str = str.slice(2);\r\n  }\r\n\r\n  // Convert `str` as an integer then divide the result by `base` raised to a power such that the\r\n  // fraction part will be restored.\r\n  i = str.indexOf('.');\r\n  isFloat = i >= 0;\r\n  Ctor = x.constructor;\r\n\r\n  if (isFloat) {\r\n    str = str.replace('.', '');\r\n    len = str.length;\r\n    i = len - i;\r\n\r\n    // log[10](16) = 1.2041... , log[10](88) = 1.9444....\r\n    divisor = intPow(Ctor, new Ctor(base), i, i * 2);\r\n  }\r\n\r\n  xd = convertBase(str, base, BASE);\r\n  xe = xd.length - 1;\r\n\r\n  // Remove trailing zeros.\r\n  for (i = xe; xd[i] === 0; --i) xd.pop();\r\n  if (i < 0) return new Ctor(x.s * 0);\r\n  x.e = getBase10Exponent(xd, xe);\r\n  x.d = xd;\r\n  external = false;\r\n\r\n  // At what precision to perform the division to ensure exact conversion?\r\n  // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\r\n  // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\r\n  // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\r\n  // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\r\n  // Therefore using 4 * the number of digits of str will always be enough.\r\n  if (isFloat) x = divide(x, divisor, len * 4);\r\n\r\n  // Multiply by the binary exponent part if present.\r\n  if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\r\n  external = true;\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction sine(Ctor, x) {\r\n  var k,\r\n    len = x.d.length;\r\n\r\n  if (len < 3) {\r\n    return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\r\n  }\r\n\r\n  // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\r\n  // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\r\n  // and  sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\r\n\r\n  // Estimate the optimum number of times to use the argument reduction.\r\n  k = 1.4 * Math.sqrt(len);\r\n  k = k > 16 ? 16 : k | 0;\r\n\r\n  x = x.times(1 / tinyPow(5, k));\r\n  x = taylorSeries(Ctor, 2, x, x);\r\n\r\n  // Reverse argument reduction\r\n  var sin2_x,\r\n    d5 = new Ctor(5),\r\n    d16 = new Ctor(16),\r\n    d20 = new Ctor(20);\r\n  for (; k--;) {\r\n    sin2_x = x.times(x);\r\n    x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n// Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\r\nfunction taylorSeries(Ctor, n, x, y, isHyperbolic) {\r\n  var j, t, u, x2,\r\n    i = 1,\r\n    pr = Ctor.precision,\r\n    k = Math.ceil(pr / LOG_BASE);\r\n\r\n  external = false;\r\n  x2 = x.times(x);\r\n  u = new Ctor(y);\r\n\r\n  for (;;) {\r\n    t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\r\n    u = isHyperbolic ? y.plus(t) : y.minus(t);\r\n    y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\r\n    t = u.plus(y);\r\n\r\n    if (t.d[k] !== void 0) {\r\n      for (j = k; t.d[j] === u.d[j] && j--;);\r\n      if (j == -1) break;\r\n    }\r\n\r\n    j = u;\r\n    u = y;\r\n    y = t;\r\n    t = j;\r\n    i++;\r\n  }\r\n\r\n  external = true;\r\n  t.d.length = k + 1;\r\n\r\n  return t;\r\n}\r\n\r\n\r\n// Exponent e must be positive and non-zero.\r\nfunction tinyPow(b, e) {\r\n  var n = b;\r\n  while (--e) n *= b;\r\n  return n;\r\n}\r\n\r\n\r\n// Return the absolute value of `x` reduced to less than or equal to half pi.\r\nfunction toLessThanHalfPi(Ctor, x) {\r\n  var t,\r\n    isNeg = x.s < 0,\r\n    pi = getPi(Ctor, Ctor.precision, 1),\r\n    halfPi = pi.times(0.5);\r\n\r\n  x = x.abs();\r\n\r\n  if (x.lte(halfPi)) {\r\n    quadrant = isNeg ? 4 : 1;\r\n    return x;\r\n  }\r\n\r\n  t = x.divToInt(pi);\r\n\r\n  if (t.isZero()) {\r\n    quadrant = isNeg ? 3 : 2;\r\n  } else {\r\n    x = x.minus(t.times(pi));\r\n\r\n    // 0 <= x < pi\r\n    if (x.lte(halfPi)) {\r\n      quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\r\n      return x;\r\n    }\r\n\r\n    quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\r\n  }\r\n\r\n  return x.minus(pi).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return the value of Decimal `x` as a string in base `baseOut`.\r\n *\r\n * If the optional `sd` argument is present include a binary exponent suffix.\r\n */\r\nfunction toStringBinary(x, baseOut, sd, rm) {\r\n  var base, e, i, k, len, roundUp, str, xd, y,\r\n    Ctor = x.constructor,\r\n    isExp = sd !== void 0;\r\n\r\n  if (isExp) {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n  } else {\r\n    sd = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n  }\r\n\r\n  if (!x.isFinite()) {\r\n    str = nonFiniteToString(x);\r\n  } else {\r\n    str = finiteToString(x);\r\n    i = str.indexOf('.');\r\n\r\n    // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\r\n    // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\r\n    // minBinaryExponent = floor(decimalExponent * log[2](10))\r\n    // log[2](10) = 3.321928094887362347870319429489390175864\r\n\r\n    if (isExp) {\r\n      base = 2;\r\n      if (baseOut == 16) {\r\n        sd = sd * 4 - 3;\r\n      } else if (baseOut == 8) {\r\n        sd = sd * 3 - 2;\r\n      }\r\n    } else {\r\n      base = baseOut;\r\n    }\r\n\r\n    // Convert the number as an integer then divide the result by its base raised to a power such\r\n    // that the fraction part will be restored.\r\n\r\n    // Non-integer.\r\n    if (i >= 0) {\r\n      str = str.replace('.', '');\r\n      y = new Ctor(1);\r\n      y.e = str.length - i;\r\n      y.d = convertBase(finiteToString(y), 10, base);\r\n      y.e = y.d.length;\r\n    }\r\n\r\n    xd = convertBase(str, 10, base);\r\n    e = len = xd.length;\r\n\r\n    // Remove trailing zeros.\r\n    for (; xd[--len] == 0;) xd.pop();\r\n\r\n    if (!xd[0]) {\r\n      str = isExp ? '0p+0' : '0';\r\n    } else {\r\n      if (i < 0) {\r\n        e--;\r\n      } else {\r\n        x = new Ctor(x);\r\n        x.d = xd;\r\n        x.e = e;\r\n        x = divide(x, y, sd, rm, 0, base);\r\n        xd = x.d;\r\n        e = x.e;\r\n        roundUp = inexact;\r\n      }\r\n\r\n      // The rounding digit, i.e. the digit after the digit that may be rounded up.\r\n      i = xd[sd];\r\n      k = base / 2;\r\n      roundUp = roundUp || xd[sd + 1] !== void 0;\r\n\r\n      roundUp = rm < 4\r\n        ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\r\n        : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\r\n          rm === (x.s < 0 ? 8 : 7));\r\n\r\n      xd.length = sd;\r\n\r\n      if (roundUp) {\r\n\r\n        // Rounding up may mean the previous digit has to be rounded up and so on.\r\n        for (; ++xd[--sd] > base - 1;) {\r\n          xd[sd] = 0;\r\n          if (!sd) {\r\n            ++e;\r\n            xd.unshift(1);\r\n          }\r\n        }\r\n      }\r\n\r\n      // Determine trailing zeros.\r\n      for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n      // E.g. [4, 11, 15] becomes 4bf.\r\n      for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n\r\n      // Add binary exponent suffix?\r\n      if (isExp) {\r\n        if (len > 1) {\r\n          if (baseOut == 16 || baseOut == 8) {\r\n            i = baseOut == 16 ? 4 : 3;\r\n            for (--len; len % i; len++) str += '0';\r\n            xd = convertBase(str, base, baseOut);\r\n            for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n            // xd[0] will always be be 1\r\n            for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n          } else {\r\n            str = str.charAt(0) + '.' + str.slice(1);\r\n          }\r\n        }\r\n\r\n        str =  str + (e < 0 ? 'p' : 'p+') + e;\r\n      } else if (e < 0) {\r\n        for (; ++e;) str = '0' + str;\r\n        str = '0.' + str;\r\n      } else {\r\n        if (++e > len) for (e -= len; e-- ;) str += '0';\r\n        else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\r\n      }\r\n    }\r\n\r\n    str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\r\n  }\r\n\r\n  return x.s < 0 ? '-' + str : str;\r\n}\r\n\r\n\r\n// Does not strip trailing zeros.\r\nfunction truncate(arr, len) {\r\n  if (arr.length > len) {\r\n    arr.length = len;\r\n    return true;\r\n  }\r\n}\r\n\r\n\r\n// Decimal methods\r\n\r\n\r\n/*\r\n *  abs\r\n *  acos\r\n *  acosh\r\n *  add\r\n *  asin\r\n *  asinh\r\n *  atan\r\n *  atanh\r\n *  atan2\r\n *  cbrt\r\n *  ceil\r\n *  clamp\r\n *  clone\r\n *  config\r\n *  cos\r\n *  cosh\r\n *  div\r\n *  exp\r\n *  floor\r\n *  hypot\r\n *  ln\r\n *  log\r\n *  log2\r\n *  log10\r\n *  max\r\n *  min\r\n *  mod\r\n *  mul\r\n *  pow\r\n *  random\r\n *  round\r\n *  set\r\n *  sign\r\n *  sin\r\n *  sinh\r\n *  sqrt\r\n *  sub\r\n *  sum\r\n *  tan\r\n *  tanh\r\n *  trunc\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction abs(x) {\r\n  return new this(x).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction acos(x) {\r\n  return new this(x).acos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction acosh(x) {\r\n  return new this(x).acosh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction add(x, y) {\r\n  return new this(x).plus(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction asin(x) {\r\n  return new this(x).asin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction asinh(x) {\r\n  return new this(x).asinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction atan(x) {\r\n  return new this(x).atan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction atanh(x) {\r\n  return new this(x).atanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi, pi]\r\n *\r\n * y {number|string|bigint|Decimal} The y-coordinate.\r\n * x {number|string|bigint|Decimal} The x-coordinate.\r\n *\r\n * atan2(\u00B10, -0)               = \u00B1pi\r\n * atan2(\u00B10, +0)               = \u00B10\r\n * atan2(\u00B10, -x)               = \u00B1pi for x > 0\r\n * atan2(\u00B10, x)                = \u00B10 for x > 0\r\n * atan2(-y, \u00B10)               = -pi/2 for y > 0\r\n * atan2(y, \u00B10)                = pi/2 for y > 0\r\n * atan2(\u00B1y, -Infinity)        = \u00B1pi for finite y > 0\r\n * atan2(\u00B1y, +Infinity)        = \u00B10 for finite y > 0\r\n * atan2(\u00B1Infinity, x)         = \u00B1pi/2 for finite x\r\n * atan2(\u00B1Infinity, -Infinity) = \u00B13*pi/4\r\n * atan2(\u00B1Infinity, +Infinity) = \u00B1pi/4\r\n * atan2(NaN, x) = NaN\r\n * atan2(y, NaN) = NaN\r\n *\r\n */\r\nfunction atan2(y, x) {\r\n  y = new this(y);\r\n  x = new this(x);\r\n  var r,\r\n    pr = this.precision,\r\n    rm = this.rounding,\r\n    wpr = pr + 4;\r\n\r\n  // Either NaN\r\n  if (!y.s || !x.s) {\r\n    r = new this(NaN);\r\n\r\n  // Both \u00B1Infinity\r\n  } else if (!y.d && !x.d) {\r\n    r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\r\n    r.s = y.s;\r\n\r\n  // x is \u00B1Infinity or y is \u00B10\r\n  } else if (!x.d || y.isZero()) {\r\n    r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\r\n    r.s = y.s;\r\n\r\n  // y is \u00B1Infinity or x is \u00B10\r\n  } else if (!y.d || x.isZero()) {\r\n    r = getPi(this, wpr, 1).times(0.5);\r\n    r.s = y.s;\r\n\r\n  // Both non-zero and finite\r\n  } else if (x.s < 0) {\r\n    this.precision = wpr;\r\n    this.rounding = 1;\r\n    r = this.atan(divide(y, x, wpr, 1));\r\n    x = getPi(this, wpr, 1);\r\n    this.precision = pr;\r\n    this.rounding = rm;\r\n    r = y.s < 0 ? r.minus(x) : r.plus(x);\r\n  } else {\r\n    r = this.atan(divide(y, x, wpr, 1));\r\n  }\r\n\r\n  return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction cbrt(x) {\r\n  return new this(x).cbrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction ceil(x) {\r\n  return finalise(x = new this(x), x.e + 1, 2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction clamp(x, min, max) {\r\n  return new this(x).clamp(min, max);\r\n}\r\n\r\n\r\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n *   precision  {number}\r\n *   rounding   {number}\r\n *   toExpNeg   {number}\r\n *   toExpPos   {number}\r\n *   maxE       {number}\r\n *   minE       {number}\r\n *   modulo     {number}\r\n *   crypto     {boolean|number}\r\n *   defaults   {true}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\nfunction config(obj) {\r\n  if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\r\n  var i, p, v,\r\n    useDefaults = obj.defaults === true,\r\n    ps = [\r\n      'precision', 1, MAX_DIGITS,\r\n      'rounding', 0, 8,\r\n      'toExpNeg', -EXP_LIMIT, 0,\r\n      'toExpPos', 0, EXP_LIMIT,\r\n      'maxE', 0, EXP_LIMIT,\r\n      'minE', -EXP_LIMIT, 0,\r\n      'modulo', 0, 9\r\n    ];\r\n\r\n  for (i = 0; i < ps.length; i += 3) {\r\n    if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\r\n    if ((v = obj[p]) !== void 0) {\r\n      if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n      else throw Error(invalidArgument + p + ': ' + v);\r\n    }\r\n  }\r\n\r\n  if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\r\n  if ((v = obj[p]) !== void 0) {\r\n    if (v === true || v === false || v === 0 || v === 1) {\r\n      if (v) {\r\n        if (typeof crypto != 'undefined' && crypto &&\r\n          (crypto.getRandomValues || crypto.randomBytes)) {\r\n          this[p] = true;\r\n        } else {\r\n          throw Error(cryptoUnavailable);\r\n        }\r\n      } else {\r\n        this[p] = false;\r\n      }\r\n    } else {\r\n      throw Error(invalidArgument + p + ': ' + v);\r\n    }\r\n  }\r\n\r\n  return this;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cos(x) {\r\n  return new this(x).cos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cosh(x) {\r\n  return new this(x).cosh();\r\n}\r\n\r\n\r\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\nfunction clone(obj) {\r\n  var i, p, ps;\r\n\r\n  /*\r\n   * The Decimal constructor and exported function.\r\n   * Return a new Decimal instance.\r\n   *\r\n   * v {number|string|bigint|Decimal} A numeric value.\r\n   *\r\n   */\r\n  function Decimal(v) {\r\n    var e, i, t,\r\n      x = this;\r\n\r\n    // Decimal called without new.\r\n    if (!(x instanceof Decimal)) return new Decimal(v);\r\n\r\n    // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n    // which points to Object.\r\n    x.constructor = Decimal;\r\n\r\n    if (isDecimalInstance(v)) {\r\n      x.s = v.s;\r\n\r\n      if (external) {\r\n        if (!v.d || v.e > Decimal.maxE) {\r\n\r\n          // Infinity.\r\n          x.e = NaN;\r\n          x.d = null;\r\n        } else if (v.e < Decimal.minE) {\r\n\r\n          // Zero.\r\n          x.e = 0;\r\n          x.d = [0];\r\n        } else {\r\n          x.e = v.e;\r\n          x.d = v.d.slice();\r\n        }\r\n      } else {\r\n        x.e = v.e;\r\n        x.d = v.d ? v.d.slice() : v.d;\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    t = typeof v;\r\n\r\n    if (t === 'number') {\r\n      if (v === 0) {\r\n        x.s = 1 / v < 0 ? -1 : 1;\r\n        x.e = 0;\r\n        x.d = [0];\r\n        return;\r\n      }\r\n\r\n      if (v < 0) {\r\n        v = -v;\r\n        x.s = -1;\r\n      } else {\r\n        x.s = 1;\r\n      }\r\n\r\n      // Fast path for small integers.\r\n      if (v === ~~v && v < 1e7) {\r\n        for (e = 0, i = v; i >= 10; i /= 10) e++;\r\n\r\n        if (external) {\r\n          if (e > Decimal.maxE) {\r\n            x.e = NaN;\r\n            x.d = null;\r\n          } else if (e < Decimal.minE) {\r\n            x.e = 0;\r\n            x.d = [0];\r\n          } else {\r\n            x.e = e;\r\n            x.d = [v];\r\n          }\r\n        } else {\r\n          x.e = e;\r\n          x.d = [v];\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      // Infinity or NaN?\r\n      if (v * 0 !== 0) {\r\n        if (!v) x.s = NaN;\r\n        x.e = NaN;\r\n        x.d = null;\r\n        return;\r\n      }\r\n\r\n      return parseDecimal(x, v.toString());\r\n    }\r\n\r\n    if (t === 'string') {\r\n      if ((i = v.charCodeAt(0)) === 45) {  // minus sign\r\n        v = v.slice(1);\r\n        x.s = -1;\r\n      } else {\r\n        if (i === 43) v = v.slice(1);  // plus sign\r\n        x.s = 1;\r\n      }\r\n\r\n      return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\r\n    }\r\n\r\n    if (t === 'bigint') {\r\n      if (v < 0) {\r\n        v = -v;\r\n        x.s = -1;\r\n      } else {\r\n        x.s = 1;\r\n      }\r\n\r\n      return parseDecimal(x, v.toString());\r\n    }\r\n\r\n    throw Error(invalidArgument + v);\r\n  }\r\n\r\n  Decimal.prototype = P;\r\n\r\n  Decimal.ROUND_UP = 0;\r\n  Decimal.ROUND_DOWN = 1;\r\n  Decimal.ROUND_CEIL = 2;\r\n  Decimal.ROUND_FLOOR = 3;\r\n  Decimal.ROUND_HALF_UP = 4;\r\n  Decimal.ROUND_HALF_DOWN = 5;\r\n  Decimal.ROUND_HALF_EVEN = 6;\r\n  Decimal.ROUND_HALF_CEIL = 7;\r\n  Decimal.ROUND_HALF_FLOOR = 8;\r\n  Decimal.EUCLID = 9;\r\n\r\n  Decimal.config = Decimal.set = config;\r\n  Decimal.clone = clone;\r\n  Decimal.isDecimal = isDecimalInstance;\r\n\r\n  Decimal.abs = abs;\r\n  Decimal.acos = acos;\r\n  Decimal.acosh = acosh;        // ES6\r\n  Decimal.add = add;\r\n  Decimal.asin = asin;\r\n  Decimal.asinh = asinh;        // ES6\r\n  Decimal.atan = atan;\r\n  Decimal.atanh = atanh;        // ES6\r\n  Decimal.atan2 = atan2;\r\n  Decimal.cbrt = cbrt;          // ES6\r\n  Decimal.ceil = ceil;\r\n  Decimal.clamp = clamp;\r\n  Decimal.cos = cos;\r\n  Decimal.cosh = cosh;          // ES6\r\n  Decimal.div = div;\r\n  Decimal.exp = exp;\r\n  Decimal.floor = floor;\r\n  Decimal.hypot = hypot;        // ES6\r\n  Decimal.ln = ln;\r\n  Decimal.log = log;\r\n  Decimal.log10 = log10;        // ES6\r\n  Decimal.log2 = log2;          // ES6\r\n  Decimal.max = max;\r\n  Decimal.min = min;\r\n  Decimal.mod = mod;\r\n  Decimal.mul = mul;\r\n  Decimal.pow = pow;\r\n  Decimal.random = random;\r\n  Decimal.round = round;\r\n  Decimal.sign = sign;          // ES6\r\n  Decimal.sin = sin;\r\n  Decimal.sinh = sinh;          // ES6\r\n  Decimal.sqrt = sqrt;\r\n  Decimal.sub = sub;\r\n  Decimal.sum = sum;\r\n  Decimal.tan = tan;\r\n  Decimal.tanh = tanh;          // ES6\r\n  Decimal.trunc = trunc;        // ES6\r\n\r\n  if (obj === void 0) obj = {};\r\n  if (obj) {\r\n    if (obj.defaults !== true) {\r\n      ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\r\n      for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n    }\r\n  }\r\n\r\n  Decimal.config(obj);\r\n\r\n  return Decimal;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction div(x, y) {\r\n  return new this(x).div(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The power to which to raise the base of the natural log.\r\n *\r\n */\r\nfunction exp(x) {\r\n  return new this(x).exp();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction floor(x) {\r\n  return finalise(x = new this(x), x.e + 1, 3);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction hypot() {\r\n  var i, n,\r\n    t = new this(0);\r\n\r\n  external = false;\r\n\r\n  for (i = 0; i < arguments.length;) {\r\n    n = new this(arguments[i++]);\r\n    if (!n.d) {\r\n      if (n.s) {\r\n        external = true;\r\n        return new this(1 / 0);\r\n      }\r\n      t = n;\r\n    } else if (t.d) {\r\n      t = t.plus(n.times(n));\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return t.sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n * otherwise return false.\r\n *\r\n */\r\nfunction isDecimalInstance(obj) {\r\n  return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction ln(x) {\r\n  return new this(x).ln();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * log[y](x)\r\n *\r\n * x {number|string|bigint|Decimal} The argument of the logarithm.\r\n * y {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\nfunction log(x, y) {\r\n  return new this(x).log(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction log2(x) {\r\n  return new this(x).log(2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction log10(x) {\r\n  return new this(x).log(10);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction max() {\r\n  return maxOrMin(this, arguments, -1);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction min() {\r\n  return maxOrMin(this, arguments, 1);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction mod(x, y) {\r\n  return new this(x).mod(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction mul(x, y) {\r\n  return new this(x).mul(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The base.\r\n * y {number|string|bigint|Decimal} The exponent.\r\n *\r\n */\r\nfunction pow(x, y) {\r\n  return new this(x).pow(y);\r\n}\r\n\r\n\r\n/*\r\n * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n * are produced).\r\n *\r\n * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n *\r\n */\r\nfunction random(sd) {\r\n  var d, e, k, n,\r\n    i = 0,\r\n    r = new this(1),\r\n    rd = [];\r\n\r\n  if (sd === void 0) sd = this.precision;\r\n  else checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n  k = Math.ceil(sd / LOG_BASE);\r\n\r\n  if (!this.crypto) {\r\n    for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\r\n\r\n  // Browsers supporting crypto.getRandomValues.\r\n  } else if (crypto.getRandomValues) {\r\n    d = crypto.getRandomValues(new Uint32Array(k));\r\n\r\n    for (; i < k;) {\r\n      n = d[i];\r\n\r\n      // 0 <= n < 4294967296\r\n      // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\r\n      if (n >= 4.29e9) {\r\n        d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\r\n      } else {\r\n\r\n        // 0 <= n <= 4289999999\r\n        // 0 <= (n % 1e7) <= 9999999\r\n        rd[i++] = n % 1e7;\r\n      }\r\n    }\r\n\r\n  // Node.js supporting crypto.randomBytes.\r\n  } else if (crypto.randomBytes) {\r\n\r\n    // buffer\r\n    d = crypto.randomBytes(k *= 4);\r\n\r\n    for (; i < k;) {\r\n\r\n      // 0 <= n < 2147483648\r\n      n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\r\n\r\n      // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\r\n      if (n >= 2.14e9) {\r\n        crypto.randomBytes(4).copy(d, i);\r\n      } else {\r\n\r\n        // 0 <= n <= 2139999999\r\n        // 0 <= (n % 1e7) <= 9999999\r\n        rd.push(n % 1e7);\r\n        i += 4;\r\n      }\r\n    }\r\n\r\n    i = k / 4;\r\n  } else {\r\n    throw Error(cryptoUnavailable);\r\n  }\r\n\r\n  k = rd[--i];\r\n  sd %= LOG_BASE;\r\n\r\n  // Convert trailing digits to zeros according to sd.\r\n  if (k && sd) {\r\n    n = mathpow(10, LOG_BASE - sd);\r\n    rd[i] = (k / n | 0) * n;\r\n  }\r\n\r\n  // Remove trailing words which are zero.\r\n  for (; rd[i] === 0; i--) rd.pop();\r\n\r\n  // Zero?\r\n  if (i < 0) {\r\n    e = 0;\r\n    rd = [0];\r\n  } else {\r\n    e = -1;\r\n\r\n    // Remove leading words which are zero and adjust exponent accordingly.\r\n    for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\r\n\r\n    // Count the digits of the first word of rd to determine leading zeros.\r\n    for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\r\n\r\n    // Adjust the exponent for leading zeros of the first word of rd.\r\n    if (k < LOG_BASE) e -= LOG_BASE - k;\r\n  }\r\n\r\n  r.e = e;\r\n  r.d = rd;\r\n\r\n  return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n *\r\n * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction round(x) {\r\n  return finalise(x = new this(x), x.e + 1, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return\r\n *   1    if x > 0,\r\n *  -1    if x < 0,\r\n *   0    if x is 0,\r\n *  -0    if x is -0,\r\n *   NaN  otherwise\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sign(x) {\r\n  x = new this(x);\r\n  return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sin(x) {\r\n  return new this(x).sin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sinh(x) {\r\n  return new this(x).sinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sqrt(x) {\r\n  return new this(x).sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sub(x, y) {\r\n  return new this(x).sub(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * Only the result is rounded, not the intermediate calculations.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sum() {\r\n  var i = 0,\r\n    args = arguments,\r\n    x = new this(args[i]);\r\n\r\n  external = false;\r\n  for (; x.s && ++i < args.length;) x = x.plus(args[i]);\r\n  external = true;\r\n\r\n  return finalise(x, this.precision, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tan(x) {\r\n  return new this(x).tan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tanh(x) {\r\n  return new this(x).tanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` truncated to an integer.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction trunc(x) {\r\n  return finalise(x = new this(x), x.e + 1, 1);\r\n}\r\n\r\n\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toString;\r\nP[Symbol.toStringTag] = 'Decimal';\r\n\r\n// Create and configure initial Decimal constructor.\r\nexport var Decimal = P.constructor = clone(DEFAULTS);\r\n\r\n// Create the internal constants from their string values.\r\nLN10 = new Decimal(LN10);\r\nPI = new Decimal(PI);\r\n\r\nexport default Decimal;\r\n", "import Decimal from \"decimal.js\";\n\nexport function getCookie(name) {\n  let cookieValue = null;\n  if (document.cookie && document.cookie !== \"\") {\n    const cookies = document.cookie.split(\";\");\n    for (let i = 0; i < cookies.length; i++) {\n      const cookie = cookies[i].trim();\n      // Does this cookie string begin with the name we want?\n      if (cookie.substring(0, name.length + 1) === name + \"=\") {\n        cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\n        break;\n      }\n    }\n  }\n  return cookieValue;\n}\n\nexport function amountToMinor(amount, currencyScale) {\n  const decimalValue = new Decimal(amount);\n  const factor = new Decimal(10).pow(currencyScale);\n  const minorUnitsDecimal = decimalValue\n    .times(factor)\n    .toDecimalPlaces(0, Decimal.ROUND_HALF_UP);\n  return minorUnitsDecimal.toNumber();\n}\n\nexport function formatTime(seconds, useShorthand = false) {\n  if (isNaN(seconds) || seconds < 0) {\n    return \"Invalid input\";\n  }\n\n  const hours = Math.floor(seconds / 3600);\n  const remainingSeconds = seconds % 3600;\n  const minutes = Math.floor(remainingSeconds / 60);\n\n  if (useShorthand) {\n    const hourString = hours > 0 ? `${hours}h` : \"\";\n    const minuteString = minutes > 0 ? `${minutes}min` : \"\";\n\n    if (hourString && minuteString) {\n      return `${hourString} ${minuteString}`;\n    } else if (hourString) {\n      return hourString;\n    } else if (minuteString) {\n      return minuteString;\n    } else {\n      return \"0min\";\n    }\n  } else {\n    const hourString = hours > 0 ? `${hours} hour${hours > 1 ? \"s\" : \"\"}` : \"\";\n    const minuteString =\n      minutes > 0 ? `${minutes} minute${minutes > 1 ? \"s\" : \"\"}` : \"\";\n\n    if (hourString && minuteString) {\n      return `${hourString}, ${minuteString}`;\n    } else if (hourString) {\n      return hourString;\n    } else if (minuteString) {\n      return minuteString;\n    } else {\n      return \"0 minutes\";\n    }\n  }\n}\n", "import Decimal from \"decimal.js\";\nimport { amountToMinor } from \"../utils\";\n\nconst INITIAL_LINE_ITEM = {\n  description: \"\",\n  quantity: 1,\n  rate: \"100.00\",\n  units: \"\",\n  total: 100,\n  projectId: null,\n  showTimeEntries: false,\n  timeEntries: [],\n  addedInitial: false,\n};\n\nfunction amountAsMoney(amount, currency, scale) {\n  const asMinor = amountToMinor(amount, scale);\n  return window.Dinero({\n    amount: asMinor,\n    currency,\n  });\n}\n\nfunction getFormattedAmount(amount, currency, scale) {\n  try {\n    const money = amountAsMoney(amount, currency, scale);\n    return money.toFormat(\"$0,0.00\");\n  } catch (e) {\n    return \"0.00\";\n  }\n}\n\nexport default function documentForm() {\n  return {\n    currency: \"USD\",\n    tax: 0,\n    lineItems: [{ ...INITIAL_LINE_ITEM }],\n    addDiscount: false,\n    discountMethod: \"\",\n    discountAmount: 0,\n    addNote: false,\n    selectedClient: null,\n    clientTaxRates: null,\n    clientId: null,\n    currencyScales: null,\n    lineItemErrors: null,\n    init() {\n      const { lineItems, lineItemErrors, clientTaxRates } = this.$el.dataset;\n\n      if (lineItems?.length > 0 && lineItems !== \"None\") {\n        this.lineItems = JSON.parse(lineItems);\n      }\n\n      if (lineItemErrors.length > 0) {\n        this.lineItemErrors = JSON.parse(JSON.parse(lineItemErrors)[0].message);\n      }\n\n      this.clientTaxRates = JSON.parse(clientTaxRates);\n\n      this.currencyScales = JSON.parse(this.$el.dataset.currencyScales);\n    },\n    handleSelectClient() {\n      this.tax = this.clientTaxRates[this.$event.target.value];\n      this.clientId = this.$event.target.value;\n    },\n    removeLineItem() {\n      this.lineItems.splice(this.$data.index, 1);\n    },\n    lineItemTotal() {\n      const item = this.lineItems[this.$data.index];\n      const rate = new Decimal(item.rate);\n      const qty = new Decimal(item.quantity);\n      return rate.mul(qty).toDecimalPlaces(this.currencyScales[this.currency]);\n    },\n    formattedLineItemTotal() {\n      return getFormattedAmount(\n        this.lineItemTotal(),\n        this.currency,\n        this.currencyScales[this.currency]\n      );\n    },\n    lineItemsSubtotal() {\n      const totals = this.lineItems.map((item) => {\n        const rate = new Decimal(item.rate);\n        const qty = new Decimal(item.quantity);\n        return rate.mul(qty);\n      });\n      return totals.reduce((prev, curr) => {\n        return prev.add(curr);\n      }, new Decimal(0));\n    },\n    formattedSubtotal() {\n      return getFormattedAmount(\n        this.lineItemsSubtotal(),\n        this.currency,\n        this.currencyScales[this.currency]\n      );\n    },\n    totalAfterTax() {\n      const subTotal = this.lineItemsSubtotal();\n      if (this.tax > 0) {\n        const percentage = subTotal.mul(this.tax / 100);\n        return subTotal.minus(percentage);\n      }\n      return subTotal;\n    },\n    formattedTotalAfterTax() {\n      return getFormattedAmount(\n        this.totalAfterTax(),\n        this.currency,\n        this.currencyScales[this.currency]\n      );\n    },\n    totalAfterDiscount() {\n      const totalAfterTax = this.totalAfterTax();\n      if (this.addDiscount) {\n        if (this.discountMethod === \"0\") {\n          const percentage = totalAfterTax.mul(this.discountAmount / 100);\n          return totalAfterTax.minus(percentage);\n        } else if (this.discountMethod === \"1\") {\n          return totalAfterTax.minus(this.discountAmount);\n        }\n      }\n      return totalAfterTax;\n    },\n    formattedTotalAfterDiscount() {\n      return getFormattedAmount(\n        this.totalAfterDiscount(),\n        this.currency,\n        this.currencyScales[this.currency]\n      );\n    },\n    addLineItem(evt) {\n      let newItem;\n      if (evt?.detail && evt.detail?.lineItem) {\n        newItem = evt.detail;\n      } else {\n        newItem = { ...INITIAL_LINE_ITEM };\n        if (this.lineItems[0]) {\n          newItem.rate = this.lineItems[0].rate;\n          newItem.units = this.lineItems[0].units;\n        }\n      }\n      if (this.addedInitial) {\n        this.lineItems.push(newItem);\n      } else {\n        this.lineItems = [newItem];\n        this.addedInitial = true;\n      }\n    },\n    addLineItems(evt) {\n      if (evt?.detail) {\n        for (const lineItem of evt.detail) {\n          if (!Number.isNaN(lineItem.projectId)) {\n            const existingItem = this.lineItems.find(\n              (item) => item.projectId === lineItem.projectId\n            );\n            if (existingItem) {\n              existingItem.timeEntries = [\n                ...existingItem.timeEntries,\n                ...lineItem.timeEntries,\n              ];\n              existingItem.total = new Decimal(existingItem.total)\n                .plus(lineItem.total)\n                .toDecimalPlaces(this.currencyScales[this.currency])\n                .toString();\n              existingItem.quantity = new Decimal(existingItem.quantity)\n                .plus(lineItem.quantity)\n                .toDecimalPlaces(2);\n            } else {\n              if (this.addedInitial) {\n                this.lineItems.push(lineItem);\n              } else {\n                this.lineItems = [lineItem];\n                this.addedInitial = true;\n              }\n            }\n          }\n        }\n      }\n    },\n    removeTimeEntry(evt) {\n      const { timeEntryIdx, lineItemIdx } = evt.target.dataset;\n      const lineItem = this.lineItems[Number(lineItemIdx)];\n      const entry = lineItem.timeEntries[Number(timeEntryIdx)];\n      lineItem.quantity = new Decimal(lineItem.quantity)\n        .minus(new Decimal(entry.quantity))\n        .toDecimalPlaces(2)\n        .toString();\n      lineItem.total = new Decimal(lineItem.total)\n        .minus(new Decimal(entry.amount))\n        .toDecimalPlaces(2)\n        .toString();\n      lineItem.timeEntries.splice(Number(timeEntryIdx), 1);\n    },\n  };\n}\n", "export default function documentFormLineItemSelector() {\n  return {\n    selectedItems: [],\n    showItem() {\n      return this.selectedItems.indexOf(this.$el.dataset.itemId) === -1;\n    },\n    handleSelectItem() {\n      const lineItem = JSON.parse(this.$event.target.dataset.lineItem);\n      this.selectedItems.push(this.$event.target.dataset.itemId);\n      this.$dispatch(\"add:lineitem\", lineItem);\n    },\n  };\n}\n", "export default function documentList() {\n  return {\n    selectedDocuments: new Set(),\n    clearAll() {\n      this.selectedDocuments.clear();\n    },\n    showSendButton() {\n      return this.selectedDocuments.size > 0;\n    },\n    showDeleteButton() {\n      return this.selectedDocuments.size > 0;\n    },\n  };\n}\n", "import Decimal from \"decimal.js\";\n\nexport default function selectTimeEntriesLineItems() {\n  return {\n    availableEntries: [],\n    selectedEntries: [],\n    fullEntries: {},\n    currencyScales: null,\n    currency: \"USD\",\n    init() {\n      this.currencyScales = JSON.parse(this.$el.dataset.currencyScales);\n      this.currency = this.$el.dataset.currency;\n    },\n    handleSelectAll() {\n      if (this.selectedEntries.length > 0) {\n        this.selectedEntries = [];\n      } else {\n        this.selectedEntries = [...this.availableEntries];\n      }\n    },\n    addSelected() {\n      const lineItems = [];\n\n      for (const entryId of this.selectedEntries) {\n        const entryData = this.fullEntries[entryId];\n        const existingItem = lineItems.find(\n          (item) => item.projectId === entryData.projectId\n        );\n        const timeEntryLine = {\n          notes: entryData.notes,\n          readable: entryData.readable,\n          date: entryData.date,\n          entryId,\n          amount: entryData.amount,\n          amountDisplay: entryData.amountDisplay,\n          quantity:\n            entryData.projectUnits === \"0\" ? entryData.seconds / 3600 : 0,\n        };\n        if (existingItem) {\n          existingItem.timeEntries.push(timeEntryLine);\n        } else {\n          lineItems.push({\n            description: entryData.projectName,\n            rate: new Decimal(entryData.projectRate).toDecimalPlaces(\n              this.currencyScales[this.currency]\n            ),\n            units: entryData.projectUnits,\n            projectId: entryData.projectId,\n            showTimeEntries: false,\n            timeEntries: [timeEntryLine],\n            quantity: 1,\n            total: entryData.projectRate,\n          });\n        }\n      }\n\n      for (const lineItem of lineItems) {\n        if (lineItem.units === \"0\") {\n          const result = lineItem.timeEntries.reduce(\n            (acc, cur) => {\n              return {\n                quantity: cur.quantity + acc.quantity,\n                total: new Decimal(cur.amount).plus(acc.total),\n              };\n            },\n            {\n              quantity: 0,\n              total: new Decimal(0),\n            }\n          );\n          lineItem.quantity = result.quantity;\n          lineItem.total = result.total.toString();\n        }\n      }\n      this.$dispatch(\"add-line-items\", lineItems);\n      this.$dispatch(\"close-modal\");\n    },\n  };\n}\n", "import { formatTime } from \"../utils\";\n\nexport default function importTimeEntriesModal() {\n  return {\n    allEntries: [],\n    selectedEntries: [],\n    toggleSelectAll(checked) {\n      if (checked) {\n        this.selectedEntries = this.allEntries.map((e) => e.id);\n      } else {\n        this.selectedEntries = [];\n      }\n    },\n    importSelectedEntries() {\n      const entriesToImport = this.allEntries.filter((e) =>\n        this.selectedEntries.includes(e.id)\n      );\n      this.$dispatch(\"import-entries\", entriesToImport);\n    },\n    get selectionSummary() {\n      let totalSeconds = 0;\n      this.selectedEntries.forEach((id) => {\n        const entry = this.allEntries.find((e) => e.id == id);\n        if (entry) totalSeconds += entry.seconds;\n      });\n      return { totalHours: formatTime(totalSeconds, true) };\n    },\n    initializeEntry() {\n      const {\n        id: entryId,\n        startedAt,\n        projectId,\n        projectName,\n        notes,\n        seconds,\n      } = this.$el.dataset;\n      if (this.allEntries.some((e) => e.id === entryId)) {\n        return;\n      }\n      this.allEntries.push({\n        id: Number(entryId),\n        startedAt,\n        projectId,\n        projectName,\n        notes,\n        seconds: Number(seconds),\n      });\n    },\n  };\n}\n", "import Decimal from \"decimal.js\";\nimport { amountToMinor, formatTime } from \"../utils\";\n\nexport default function invoiceForm() {\n  return {\n    timeEntries: [\n      /*\n{\n        id: 1,\n        startedAt: '2025-07-25T07:33:19.301548+00:00',\n        projectId: 1,\n        projectName: \"My cool project\",\n        notes: \"Some notes\",\n        seconds: 3600,\n      }\n      */\n    ],\n\n    lineItems: [\n      /*\n      Example:\n    {\n            description: \"My cool project\",\n            quantity: 50,\n            rate: new Decimal(100),\n            is_bundled: true,\n            project_id: 1,\n            item_type: \"project\",\n            units: \"0\",\n            entries: [\n            {\n        startedAt: '2025-07-25T07:33:19.301548+00:00',\n        projectId: 1,\n        projectName: \"My cool project\",\n        notes: \"Some notes\",\n        seconds: 3600,\n      }\n            ],\n    },\n\n    {\n        description: \"\",\n        quantity: 1,\n        rate: 0,\n        is_bundled: false,\n        entries: [],\n    }\n\n    \n    */\n    ],\n    client: null,\n    currencyCode: \"USD\",\n    currency: { code: \"USD\", symbol: \"$\" },\n    taxRate: 0,\n    discount: 0,\n    discountMethod: null,\n    discountAmount: 0,\n    subtotal: 0,\n    taxAmount: 0,\n    total: 0,\n    nextId: 3,\n    savedNotes: [],\n    currentNoteContent: \"\",\n    saveNoteForLater: false,\n    attachedFiles: [],\n    existingFiles: [],\n    deletedFiles: [],\n    includeAppendix: true,\n    showManageEntriesModal: false,\n    activeBundledLineItemIndex: null,\n    activeBundledLineItem: {},\n    currentBundleEntries: [],\n    clientTaxRates: {},\n    currencyScales: {},\n    projects: [],\n\n    init() {\n      this.clientTaxRates = JSON.parse(this.$el.dataset.clientTaxRates || \"{}\");\n      this.currencyScales = JSON.parse(this.$el.dataset.currencyScales || \"{}\");\n\n      const clientSelect = this.$el.querySelector(\"select[name='client']\");\n      if (clientSelect && clientSelect.value) {\n        this.client = clientSelect.value;\n      }\n\n      const currencySelect = this.$el.querySelector(\"select[name='currency']\");\n      if (currencySelect && currencySelect.value) {\n        this.currencyCode = currencySelect.value;\n      }\n\n      const initialLineItems = JSON.parse(\n        this.$el.dataset.initialLineItems || \"[]\"\n      );\n      initialLineItems.forEach((item) => {\n        const { errors, ...data } = item;\n        this.initializeLineItem(data, errors || null);\n      });\n\n      this.calculateTotals();\n\n      document.addEventListener(\"import-entries\", (evt) => {\n        this.importEntries(evt.detail);\n      });\n    },\n    initializeLineItem(data, errors) {\n      const {\n        description,\n        quantity,\n        rate,\n        units,\n        item_type: itemType,\n        project: projectId,\n      } = data;\n      const lineItem = {\n        description: description || \"\",\n        quantity: Number(quantity) || 1,\n        rate: new Decimal(rate || \"100.00\"),\n        is_bundled: itemType === 1,\n        project_id: Number(projectId) || null,\n        item_type: itemType === 1 ? \"project\" : \"other\",\n        units: units === 0 ? \"0\" : \"\",\n        entries: [],\n      };\n      if (errors) {\n        lineItem.errors =\n          typeof errors === \"string\" ? JSON.parse(errors) : errors;\n      }\n\n      const timeEntriesElements = document.querySelectorAll(\n        `[data-initial-time-entry=\"${lineItem.project_id}\"]`\n      );\n\n      timeEntriesElements.forEach((el) => {\n        const { id, startedAt, projectId, projectName, notes, seconds } =\n          el.dataset;\n        const entry = {\n          id: id ? Number(id) : this.timeEntries.length,\n          startedAt: startedAt,\n          projectId: Number(projectId) || null,\n          projectName: projectName || \"\",\n          notes: notes || \"\",\n          seconds: Number(seconds) || 0,\n        };\n        this.timeEntries.push(entry);\n        lineItem.entries.push(entry);\n      });\n\n      this.lineItems.push(lineItem);\n      this.calculateTotals();\n    },\n    handleClientChange() {\n      const client = Number(this.$event.target.value);\n      const taxRate = this.clientTaxRates[client] || 0;\n      this.taxRate = taxRate;\n      this.client = this.$event.target.value;\n      const projectIds = this.projects\n        .filter((p) => p.clientId === client)\n        .map((p) => p.id);\n      this.lineItems = this.lineItems.filter(\n        (item) => !item.is_bundled || projectIds.includes(item.project_id)\n      );\n      this.timeEntries = this.timeEntries.filter(\n        (entry) => !projectIds.includes(entry.projectId)\n      );\n      this.calculateTotals();\n    },\n    addLineItem() {\n      this.lineItems.push({\n        description: \"\",\n        quantity: 1,\n        rate: 0,\n        is_bundled: false,\n        entries: [],\n      });\n      this.calculateTotals();\n    },\n    removeLineItem(index) {\n      const entries = this.lineItems[index].entries || [];\n      const entryIds = entries.map((e) => e.id);\n      this.timeEntries = this.timeEntries.filter(\n        (e) => !entryIds.includes(e.id)\n      );\n      this.lineItems.splice(index, 1);\n      this.calculateTotals();\n    },\n    calculateTotals() {\n      let sub = 0;\n      this.lineItems.forEach((item) => {\n        sub += (item.quantity || 0) * (item.rate || 0);\n      });\n      this.subtotal = sub;\n      let discountAmount = 0;\n      if (this.discountMethod === \"0\") {\n        discountAmount = (this.discount / 100) * sub;\n      } else if (this.discountMethod === \"1\") {\n        discountAmount = this.discount;\n      }\n      this.discountAmount = discountAmount;\n      const subAfterDiscount = this.subtotal - discountAmount;\n      const tax = (this.taxRate || 0) / 100;\n      this.taxAmount = subAfterDiscount * tax;\n      this.total = subAfterDiscount + this.taxAmount;\n    },\n    selectNote(noteId) {\n      if (!noteId) {\n        this.currentNoteContent = \"\";\n        return;\n      }\n      const selected = this.savedNotes.find((n) => n.id == noteId);\n      if (selected) {\n        this.currentNoteContent = selected.content;\n      }\n    },\n    handleFiles(event) {\n      let files = Array.from(event.target.files);\n      files.forEach((file) => {\n        if (\n          !this.attachedFiles.some(\n            (f) => f.name === file.name && f.size === file.size\n          )\n        ) {\n          this.attachedFiles.push(file);\n        }\n      });\n      event.target.value = null;\n    },\n    removeFile(index) {\n      this.attachedFiles.splice(index, 1);\n    },\n    formatCurrency(amount) {\n      if (typeof amount !== \"number\") {\n        amount = 0;\n      }\n      const minorAmount = amountToMinor(\n        amount,\n        this.currencyScales[this.currencyCode]\n      );\n      // eslint-disable-next-line no-undef\n      const monetary = Dinero({\n        amount: minorAmount,\n        currency: this.currencyCode,\n      });\n      return monetary.toFormat();\n    },\n    formatFileSize(bytes) {\n      if (bytes === 0) return \"0 Bytes\";\n      const k = 1024;\n      const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n      const i = Math.floor(Math.log(bytes) / Math.log(k));\n      return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + \" \" + sizes[i];\n    },\n\n    // Modal specific logic\n    openManageEntriesModal(index) {\n      this.activeBundledLineItemIndex = index;\n      this.activeBundledLineItem = this.lineItems[index];\n      // Create a deep copy to avoid modifying the original data until \"Update\" is clicked\n      this.currentBundleEntries = JSON.parse(\n        JSON.stringify(this.activeBundledLineItem.entries)\n      );\n      this.showManageEntriesModal = true;\n    },\n    removeEntryFromBundle(entryIndex) {\n      this.currentBundleEntries.splice(entryIndex, 1);\n    },\n    get bundledHours() {\n      let totalSeconds = this.currentBundleEntries.reduce(\n        (sum, entry) => sum + entry.seconds,\n        0\n      );\n      return formatTime(totalSeconds, true);\n    },\n    updateBundledLineItem() {\n      // Commit changes from the modal back to the main line item\n      this.lineItems[this.activeBundledLineItemIndex].entries =\n        this.currentBundleEntries;\n      // Sync timeEntries with the updated entries\n      this.timeEntries = this.timeEntries.filter((e) =>\n        this.currentBundleEntries.some((entry) => entry.id === e.id)\n      );\n      let totalSeconds = this.currentBundleEntries.reduce(\n        (sum, entry) => sum + entry.seconds,\n        0\n      );\n      this.lineItems[this.activeBundledLineItemIndex].quantity = parseFloat(\n        (totalSeconds / 3600).toFixed(2)\n      );\n      this.calculateTotals();\n      this.cancelManageEntries();\n    },\n    cancelManageEntries() {\n      this.showManageEntriesModal = false;\n      this.activeBundledLineItemIndex = null;\n      this.activeBundledLineItem = {};\n      this.currentBundleEntries = [];\n    },\n    importEntries(entries) {\n      if (!Array.isArray(entries) || entries.length === 0) {\n        // eslint-disable-next-line no-undef\n        Swal.fire({\n          title: \"No Entries Selected\",\n          text: \"Please select at least one entry to import.\",\n          icon: \"warning\",\n        });\n        return;\n      }\n      const groupedByProject = entries.reduce((acc, entry) => {\n        const projectId = Number(entry.projectId);\n        if (!acc[entry.projectId]) {\n          acc[entry.projectId] = {\n            projectId: projectId,\n            projectName: entry.projectName,\n            entries: [],\n          };\n        }\n        acc[projectId].entries.push(entry);\n        return acc;\n      }, {});\n      for (const [projectId, timeEntries] of Object.entries(groupedByProject)) {\n        const existingItem = this.lineItems.find((item) => {\n          return (\n            Number(item.project_id) === Number(projectId) && item.is_bundled\n          );\n        });\n        if (existingItem) {\n          // If an existing bundled item is found, add entries to it\n          existingItem.entries.push(...timeEntries.entries);\n          existingItem.quantity = parseFloat(\n            (\n              existingItem.entries.reduce((sum, e) => sum + e.seconds, 0) / 3600\n            ).toFixed(2)\n          );\n          console.log(existingItem.quantity);\n        } else {\n          const projectData = this.projects.find(\n            (p) => p.id === parseInt(projectId)\n          );\n          // Create a new bundled line item\n          this.lineItems.push({\n            id: this.nextId++,\n            description: projectData.name,\n            quantity: Number(\n              timeEntries.entries.reduce((sum, e) => sum + e.seconds, 0) / 3600\n            ).toFixed(2),\n            rate: new Decimal(projectData.rate || 0),\n            is_bundled: true,\n            project_id: projectId,\n            item_type: \"project\",\n            units: \"0\",\n            entries: timeEntries.entries,\n          });\n        }\n        this.timeEntries = [...this.timeEntries, ...timeEntries.entries];\n      }\n      this.calculateTotals();\n      // eslint-disable-next-line no-undef\n      Swal.fire({\n        title: \"Entries Imported\",\n        text: `${entries.length} entries have been successfully imported.`,\n        icon: \"success\",\n      });\n      // Close the modal after import\n      this.showManageEntriesModal = false;\n      this.activeBundledLineItemIndex = null;\n      this.activeBundledLineItem = {};\n      this.currentBundleEntries = [];\n      // Dispatch an event to close the modal if needed\n      // This is useful if the modal is managed by a parent component\n      // or if you want to trigger any additional cleanup\n      this.$dispatch(\"close-modal\");\n    },\n    formatSeconds(seconds, useShorthand = false) {\n      return formatTime(seconds, useShorthand);\n    },\n    initializeAttachmentInput(index) {\n      const dt = new DataTransfer();\n      if (this.attachedFiles[index]) {\n        dt.items.add(this.attachedFiles[index]);\n      }\n      this.$el.files = dt.files;\n    },\n    updateManagementForm(newCount) {\n      const managementForm = document.querySelector(\n        \"input[name='line_item-TOTAL_FORMS']\"\n      );\n      if (managementForm) {\n        managementForm.value = newCount;\n      }\n    },\n    updateTimeEntryManagementForm(newCount) {\n      const managementForm = document.querySelector(\n        \"input[name='time_entry-TOTAL_FORMS']\"\n      );\n      if (managementForm) {\n        managementForm.value = newCount;\n      }\n    },\n  };\n}\n", "export default function modal() {\n  return {\n    init() {\n      this.show();\n    },\n    show() {\n      this.$el.style =\n        \"z-index: 50;pointer-events: auto;visibility: visible;opacity:100;\";\n    },\n    close() {\n      this.$el.remove();\n    },\n  };\n}\n", "function asyncGeneratorStep(n, t, e, r, o, a, c) {\n  try {\n    var i = n[a](c),\n      u = i.value;\n  } catch (n) {\n    return void e(n);\n  }\n  i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n  return function () {\n    var t = this,\n      e = arguments;\n    return new Promise(function (r, o) {\n      var a = n.apply(t, e);\n      function _next(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n      }\n      function _throw(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n      }\n      _next(void 0);\n    });\n  };\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\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 _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = _objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var s = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (e.includes(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nfunction _regeneratorRuntime() {\n  _regeneratorRuntime = function () {\n    return e;\n  };\n  var t,\n    e = {},\n    r = Object.prototype,\n    n = r.hasOwnProperty,\n    o = Object.defineProperty || function (t, e, r) {\n      t[e] = r.value;\n    },\n    i = \"function\" == typeof Symbol ? Symbol : {},\n    a = i.iterator || \"@@iterator\",\n    c = i.asyncIterator || \"@@asyncIterator\",\n    u = i.toStringTag || \"@@toStringTag\";\n  function define(t, e, r) {\n    return Object.defineProperty(t, e, {\n      value: r,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }), t[e];\n  }\n  try {\n    define({}, \"\");\n  } catch (t) {\n    define = function (t, e, r) {\n      return t[e] = r;\n    };\n  }\n  function wrap(t, e, r, n) {\n    var i = e && e.prototype instanceof Generator ? e : Generator,\n      a = Object.create(i.prototype),\n      c = new Context(n || []);\n    return o(a, \"_invoke\", {\n      value: makeInvokeMethod(t, r, c)\n    }), a;\n  }\n  function tryCatch(t, e, r) {\n    try {\n      return {\n        type: \"normal\",\n        arg: t.call(e, r)\n      };\n    } catch (t) {\n      return {\n        type: \"throw\",\n        arg: t\n      };\n    }\n  }\n  e.wrap = wrap;\n  var h = \"suspendedStart\",\n    l = \"suspendedYield\",\n    f = \"executing\",\n    s = \"completed\",\n    y = {};\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  var p = {};\n  define(p, a, function () {\n    return this;\n  });\n  var d = Object.getPrototypeOf,\n    v = d && d(d(values([])));\n  v && v !== r && n.call(v, a) && (p = v);\n  var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n  function defineIteratorMethods(t) {\n    [\"next\", \"throw\", \"return\"].forEach(function (e) {\n      define(t, e, function (t) {\n        return this._invoke(e, t);\n      });\n    });\n  }\n  function AsyncIterator(t, e) {\n    function invoke(r, o, i, a) {\n      var c = tryCatch(t[r], t, o);\n      if (\"throw\" !== c.type) {\n        var u = c.arg,\n          h = u.value;\n        return h && \"object\" == typeof h && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n          invoke(\"next\", t, i, a);\n        }, function (t) {\n          invoke(\"throw\", t, i, a);\n        }) : e.resolve(h).then(function (t) {\n          u.value = t, i(u);\n        }, function (t) {\n          return invoke(\"throw\", t, i, a);\n        });\n      }\n      a(c.arg);\n    }\n    var r;\n    o(this, \"_invoke\", {\n      value: function (t, n) {\n        function callInvokeWithMethodAndArg() {\n          return new e(function (e, r) {\n            invoke(t, n, e, r);\n          });\n        }\n        return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n      }\n    });\n  }\n  function makeInvokeMethod(e, r, n) {\n    var o = h;\n    return function (i, a) {\n      if (o === f) throw Error(\"Generator is already running\");\n      if (o === s) {\n        if (\"throw\" === i) throw a;\n        return {\n          value: t,\n          done: !0\n        };\n      }\n      for (n.method = i, n.arg = a;;) {\n        var c = n.delegate;\n        if (c) {\n          var u = maybeInvokeDelegate(c, n);\n          if (u) {\n            if (u === y) continue;\n            return u;\n          }\n        }\n        if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n          if (o === h) throw o = s, n.arg;\n          n.dispatchException(n.arg);\n        } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n        o = f;\n        var p = tryCatch(e, r, n);\n        if (\"normal\" === p.type) {\n          if (o = n.done ? s : l, p.arg === y) continue;\n          return {\n            value: p.arg,\n            done: n.done\n          };\n        }\n        \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n      }\n    };\n  }\n  function maybeInvokeDelegate(e, r) {\n    var n = r.method,\n      o = e.iterator[n];\n    if (o === t) return r.delegate = null, \"throw\" === n && e.iterator.return && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n    var i = tryCatch(o, e.iterator, r.arg);\n    if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n    var a = i.arg;\n    return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n  }\n  function pushTryEntry(t) {\n    var e = {\n      tryLoc: t[0]\n    };\n    1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n  }\n  function resetTryEntry(t) {\n    var e = t.completion || {};\n    e.type = \"normal\", delete e.arg, t.completion = e;\n  }\n  function Context(t) {\n    this.tryEntries = [{\n      tryLoc: \"root\"\n    }], t.forEach(pushTryEntry, this), this.reset(!0);\n  }\n  function values(e) {\n    if (e || \"\" === e) {\n      var r = e[a];\n      if (r) return r.call(e);\n      if (\"function\" == typeof e.next) return e;\n      if (!isNaN(e.length)) {\n        var o = -1,\n          i = function next() {\n            for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n            return next.value = t, next.done = !0, next;\n          };\n        return i.next = i;\n      }\n    }\n    throw new TypeError(typeof e + \" is not iterable\");\n  }\n  return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n    value: GeneratorFunctionPrototype,\n    configurable: !0\n  }), o(GeneratorFunctionPrototype, \"constructor\", {\n    value: GeneratorFunction,\n    configurable: !0\n  }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n    var e = \"function\" == typeof t && t.constructor;\n    return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n  }, e.mark = function (t) {\n    return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t;\n  }, e.awrap = function (t) {\n    return {\n      __await: t\n    };\n  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n    return this;\n  }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n    void 0 === i && (i = Promise);\n    var a = new AsyncIterator(wrap(t, r, n, o), i);\n    return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n      return t.done ? t.value : a.next();\n    });\n  }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n    return this;\n  }), define(g, \"toString\", function () {\n    return \"[object Generator]\";\n  }), e.keys = function (t) {\n    var e = Object(t),\n      r = [];\n    for (var n in e) r.push(n);\n    return r.reverse(), function next() {\n      for (; r.length;) {\n        var t = r.pop();\n        if (t in e) return next.value = t, next.done = !1, next;\n      }\n      return next.done = !0, next;\n    };\n  }, e.values = values, Context.prototype = {\n    constructor: Context,\n    reset: function (e) {\n      if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);\n    },\n    stop: function () {\n      this.done = !0;\n      var t = this.tryEntries[0].completion;\n      if (\"throw\" === t.type) throw t.arg;\n      return this.rval;\n    },\n    dispatchException: function (e) {\n      if (this.done) throw e;\n      var r = this;\n      function handle(n, o) {\n        return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n      }\n      for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n        var i = this.tryEntries[o],\n          a = i.completion;\n        if (\"root\" === i.tryLoc) return handle(\"end\");\n        if (i.tryLoc <= this.prev) {\n          var c = n.call(i, \"catchLoc\"),\n            u = n.call(i, \"finallyLoc\");\n          if (c && u) {\n            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n          } else if (c) {\n            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n          } else {\n            if (!u) throw Error(\"try statement without catch or finally\");\n            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n          }\n        }\n      }\n    },\n    abrupt: function (t, e) {\n      for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n        var o = this.tryEntries[r];\n        if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n          var i = o;\n          break;\n        }\n      }\n      i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n      var a = i ? i.completion : {};\n      return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n    },\n    complete: function (t, e) {\n      if (\"throw\" === t.type) throw t.arg;\n      return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n    },\n    finish: function (t) {\n      for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n        var r = this.tryEntries[e];\n        if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n      }\n    },\n    catch: function (t) {\n      for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n        var r = this.tryEntries[e];\n        if (r.tryLoc === t) {\n          var n = r.completion;\n          if (\"throw\" === n.type) {\n            var o = n.arg;\n            resetTryEntry(r);\n          }\n          return o;\n        }\n      }\n      throw Error(\"illegal catch attempt\");\n    },\n    delegateYield: function (e, r, n) {\n      return this.delegate = {\n        iterator: values(e),\n        resultName: r,\n        nextLoc: n\n      }, \"next\" === this.method && (this.arg = t), y;\n    }\n  }, e;\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\n\nvar Versions = {\n  CLASSIC: 'classic',\n  V1: 'v1'\n};\nvar DefaultVersion = Versions.V1;\nvar PaddleClassicCDNUrl = 'https://cdn.paddle.com/paddle/paddle.js';\nvar PaddleBillingCDNUrl = 'https://cdn.paddle.com/paddle/v2/paddle.js';\nvar PaddleClassicInfo = {\n  url: PaddleClassicCDNUrl\n};\nvar PaddleBillingV1Info = {\n  url: PaddleBillingCDNUrl\n};\n\nfunction findScript(cdnUrl) {\n  return document.querySelector(\"script[src=\\\"\".concat(cdnUrl, \"\\\"]\")) || undefined;\n}\nfunction injectScript(src) {\n  var script = document.createElement('script');\n  script.src = src;\n  var headOrBody = document.head || document.body;\n  if (!headOrBody) {\n    throw new Error('Cannot inject Paddle.js. It needs a <head> or <body> element.');\n  }\n  headOrBody.appendChild(script);\n  return script;\n}\nvar promiseMap = {\n  classic: undefined,\n  v1: undefined\n};\nvar VersionToPaddleMap = {\n  classic: 'PaddleClassic',\n  v1: 'PaddleBillingV1'\n};\nfunction loadFromCDN(version) {\n  var _getCDNInfoBasedOnVer;\n  var cdnUrl = (_getCDNInfoBasedOnVer = getCDNInfoBasedOnVersion(version)) === null || _getCDNInfoBasedOnVer === void 0 ? void 0 : _getCDNInfoBasedOnVer.url;\n  if (!cdnUrl) {\n    return;\n  }\n  // Return promise on re-renders\n  var existingPromise = promiseMap[version];\n  var paddleInstanceName = VersionToPaddleMap[version];\n  if (existingPromise !== undefined) {\n    return existingPromise;\n  }\n  promiseMap[version] = new Promise(function (resolve, reject) {\n    if (typeof window === 'undefined') {\n      // Return undefined in a server side environment\n      resolve(undefined);\n      return;\n    }\n    // Return Paddle instance if it is already initialized\n    if (window[paddleInstanceName]) {\n      resolve(window[paddleInstanceName]);\n      return;\n    }\n    try {\n      // Inject if paddle.js script tag is not found\n      var script = findScript(cdnUrl);\n      if (!script) {\n        script = injectScript(cdnUrl);\n      }\n      // Wait for `load` event before returning\n      script.addEventListener('load', function () {\n        if (window[paddleInstanceName]) {\n          resolve(window[paddleInstanceName]);\n        } else {\n          reject(new Error('Paddle.js not available'));\n        }\n      });\n      // Show an error if loading fails\n      script.addEventListener('error', function () {\n        reject(new Error(\"Failed to load Paddle.js - \".concat(version)));\n      });\n    } catch (error) {\n      reject(error);\n      return;\n    }\n  });\n  return promiseMap[version];\n}\nfunction getCDNInfoBasedOnVersion(version) {\n  if (version === Versions.CLASSIC) {\n    return PaddleClassicInfo;\n  }\n  if (version === Versions.V1) {\n    return PaddleBillingV1Info;\n  } else {\n    console.error('[Paddle] Unknown Paddle Version');\n    return;\n  }\n}\n\nvar _excluded = [\"environment\", \"version\"],\n  _excluded2 = [\"environment\", \"version\"];\nfunction initializePaddleBillingV1(options, paddle) {\n  var environment = options.environment;\n    options.version;\n    var rest = _objectWithoutProperties(options, _excluded);\n  try {\n    if (environment) {\n      paddle.Environment.set(environment);\n    }\n    if (paddle.Initialized) {\n      paddle.Update(_objectSpread2({}, rest));\n    } else {\n      paddle.Initialize(_objectSpread2({}, rest));\n    }\n  } catch (e) {\n    console.warn('[Paddle] Paddle Initialization failed. Please check the inputs', e);\n  }\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction initializePaddleClassic(options, paddle) {\n  var environment = options.environment;\n    options.version;\n    var rest = _objectWithoutProperties(options, _excluded2);\n  try {\n    if (environment) {\n      paddle.Environment.set(environment);\n    }\n    paddle.Setup(_objectSpread2({}, rest));\n  } catch (e) {\n    console.warn('[Paddle] Paddle Initialization failed. Please check the inputs', e);\n  }\n}\n\n// Note: The enums in this file is only for `src`. Typescript will also need it added to the `types` directory for usage.\nvar CheckoutEventNames;\n(function (CheckoutEventNames) {\n  CheckoutEventNames[\"CHECKOUT_LOADED\"] = \"checkout.loaded\";\n  CheckoutEventNames[\"CHECKOUT_CLOSED\"] = \"checkout.closed\";\n  CheckoutEventNames[\"CHECKOUT_UPDATED\"] = \"checkout.updated\";\n  CheckoutEventNames[\"CHECKOUT_COMPLETED\"] = \"checkout.completed\";\n  CheckoutEventNames[\"CHECKOUT_ERROR\"] = \"checkout.error\";\n  CheckoutEventNames[\"CHECKOUT_FAILED\"] = \"checkout.failed\";\n  CheckoutEventNames[\"CHECKOUT_ITEMS_UPDATED\"] = \"checkout.items.updated\";\n  CheckoutEventNames[\"CHECKOUT_ITEMS_REMOVED\"] = \"checkout.items.removed\";\n  CheckoutEventNames[\"CHECKOUT_CUSTOMER_CREATED\"] = \"checkout.customer.created\";\n  CheckoutEventNames[\"CHECKOUT_CUSTOMER_UPDATED\"] = \"checkout.customer.updated\";\n  CheckoutEventNames[\"CHECKOUT_CUSTOMER_REMOVED\"] = \"checkout.customer.removed\";\n  CheckoutEventNames[\"CHECKOUT_PAYMENT_SELECTED\"] = \"checkout.payment.selected\";\n  CheckoutEventNames[\"CHECKOUT_PAYMENT_INITIATED\"] = \"checkout.payment.initiated\";\n  CheckoutEventNames[\"CHECKOUT_PAYMENT_FAILED\"] = \"checkout.payment.failed\";\n  CheckoutEventNames[\"CHECKOUT_DISCOUNT_APPLIED\"] = \"checkout.discount.applied\";\n  CheckoutEventNames[\"CHECKOUT_DISCOUNT_REMOVED\"] = \"checkout.discount.removed\";\n})(CheckoutEventNames || (CheckoutEventNames = {}));\nvar CheckoutEventsTimePeriodInterval;\n(function (CheckoutEventsTimePeriodInterval) {\n  CheckoutEventsTimePeriodInterval[\"DAY\"] = \"day\";\n  CheckoutEventsTimePeriodInterval[\"WEEK\"] = \"week\";\n  CheckoutEventsTimePeriodInterval[\"MONTH\"] = \"month\";\n  CheckoutEventsTimePeriodInterval[\"YEAR\"] = \"year\";\n})(CheckoutEventsTimePeriodInterval || (CheckoutEventsTimePeriodInterval = {}));\nvar CheckoutEventsPaymentMethodTypes;\n(function (CheckoutEventsPaymentMethodTypes) {\n  CheckoutEventsPaymentMethodTypes[\"ALIPAY\"] = \"alipay\";\n  CheckoutEventsPaymentMethodTypes[\"APPLE_PAY\"] = \"apple-pay\";\n  CheckoutEventsPaymentMethodTypes[\"CARD\"] = \"card\";\n  CheckoutEventsPaymentMethodTypes[\"GOOGLE_PAY\"] = \"google-pay\";\n  CheckoutEventsPaymentMethodTypes[\"IDEAL\"] = \"ideal\";\n  CheckoutEventsPaymentMethodTypes[\"PAYPAL\"] = \"paypal\";\n  CheckoutEventsPaymentMethodTypes[\"WIRE_TRANSFER\"] = \"wire-transfer\";\n  CheckoutEventsPaymentMethodTypes[\"NONE\"] = \"none\";\n})(CheckoutEventsPaymentMethodTypes || (CheckoutEventsPaymentMethodTypes = {}));\nvar CheckoutEventsPaymentMethodCardTypes;\n(function (CheckoutEventsPaymentMethodCardTypes) {\n  CheckoutEventsPaymentMethodCardTypes[\"AMERICAN_EXPRESS\"] = \"american_express\";\n  CheckoutEventsPaymentMethodCardTypes[\"DINERS_CLUB\"] = \"diners_club\";\n  CheckoutEventsPaymentMethodCardTypes[\"DISCOVER\"] = \"discover\";\n  CheckoutEventsPaymentMethodCardTypes[\"JCB\"] = \"jcb\";\n  CheckoutEventsPaymentMethodCardTypes[\"MADA\"] = \"mada\";\n  CheckoutEventsPaymentMethodCardTypes[\"MAESTRO\"] = \"maestro\";\n  CheckoutEventsPaymentMethodCardTypes[\"MASTER_CARD\"] = \"mastercard\";\n  CheckoutEventsPaymentMethodCardTypes[\"UNION_PAY\"] = \"union_pay\";\n  CheckoutEventsPaymentMethodCardTypes[\"VISA\"] = \"visa\";\n  CheckoutEventsPaymentMethodCardTypes[\"UNKNOWN\"] = \"unknown\";\n})(CheckoutEventsPaymentMethodCardTypes || (CheckoutEventsPaymentMethodCardTypes = {}));\nvar CheckoutEventsStatus;\n(function (CheckoutEventsStatus) {\n  CheckoutEventsStatus[\"DRAFT\"] = \"draft\";\n  CheckoutEventsStatus[\"READY\"] = \"ready\";\n  CheckoutEventsStatus[\"COMPLETED\"] = \"completed\";\n  CheckoutEventsStatus[\"BILLED\"] = \"billed\";\n  CheckoutEventsStatus[\"canceled\"] = \"canceled\";\n  CheckoutEventsStatus[\"PAST_DUE\"] = \"past_due\";\n})(CheckoutEventsStatus || (CheckoutEventsStatus = {}));\n\nfunction initializePaddle(_x) {\n  return _initializePaddle.apply(this, arguments);\n}\nfunction _initializePaddle() {\n  _initializePaddle = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {\n    var requestedVersion, paddle;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          requestedVersion = (options === null || options === void 0 ? void 0 : options.version) || DefaultVersion;\n          _context.next = 3;\n          return loadFromCDN(requestedVersion);\n        case 3:\n          paddle = _context.sent;\n          if (!paddle) {\n            _context.next = 9;\n            break;\n          }\n          if (options) {\n            if (requestedVersion === Versions.V1) {\n              initializePaddleBillingV1(options, paddle);\n            } else if (requestedVersion === Versions.CLASSIC) {\n              initializePaddleClassic(options, paddle);\n            }\n          }\n          return _context.abrupt(\"return\", paddle);\n        case 9:\n          console.error('[Paddle] Error Loading Paddle');\n          return _context.abrupt(\"return\");\n        case 11:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  return _initializePaddle.apply(this, arguments);\n}\nfunction getPaddleInstance() {\n  var version = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DefaultVersion;\n  if (version === Versions.V1) {\n    return window.PaddleBillingV1;\n  } else if (version === Versions.CLASSIC) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return window.PaddleClassic;\n  } else {\n    console.error('[Paddle] Unknown Paddle Version');\n    return;\n  }\n}\n\nexport { CheckoutEventNames, CheckoutEventsPaymentMethodCardTypes, CheckoutEventsPaymentMethodTypes, CheckoutEventsStatus, CheckoutEventsTimePeriodInterval, getPaddleInstance, initializePaddle };\n", "import { initializePaddle } from \"@paddle/paddle-js\";\n\nexport default function paddleCheckout() {\n  return {\n    paddle: null,\n    init() {\n      const {\n        transactionId,\n        customerId,\n        paddleToken,\n        successUrl,\n        environment,\n      } = this.$el.dataset;\n      initializePaddle({\n        token: paddleToken,\n        pwCustomer: {\n          id: customerId,\n        },\n        environment,\n      }).then((paddle) => {\n        this.paddle = paddle;\n        paddle.Checkout.open({\n          allowLogout: false,\n          displayMode: \"overlay\",\n          successUrl: successUrl,\n          transactionId: transactionId,\n        });\n      });\n    },\n  };\n}\n", "export default function projectTimeEntries() {\n  return {\n    selectedEntries: new Set(),\n    allIds: new Set(),\n    init() {\n      const { entryIds } = this.$el.dataset;\n      entryIds.split(\",\").forEach((entry) => this.allIds.add(entry));\n    },\n    toggleSelectAll() {\n      if (this.$event.target.checked) {\n        for (let id of this.allIds.values()) {\n          this.selectedEntries.add(id);\n        }\n      } else {\n        this.selectedEntries.clear();\n      }\n    },\n    handleSelect() {\n      if (this.$event.target.checked) {\n        this.selectedEntries.add(this.$event.target.value);\n      } else {\n        this.selectedEntries.delete(this.$event.target.value);\n      }\n    },\n  };\n}\n", "export default function switchBtn() {\n  return {\n    modelName: null,\n    init() {\n      const { model } = this.$el.dataset;\n      this.modelName = model;\n    },\n    handleClick() {\n      this.$refs.checkInput.setAttribute(\n        \"aria-checked\",\n        this.$refs.checkInput.getAttribute(\"aria-checked\") === \"false\"\n          ? \"true\"\n          : \"false\"\n      );\n      this.$refs.checkInput.checked = !this.$refs.checkInput.checked;\n      this.$refs.span.classList.toggle(\"translate-x-5\");\n      this.$el.classList.toggle(\"bg-gray-200\");\n      this.$el.classList.toggle(\"bg-blue-600\");\n      this[this.modelName] = !this[this.modelName];\n    },\n  };\n}\n", "export default function taskForm() {\n  return {\n    billingType: null,\n    search: \"\",\n    showProjectCreateForm: false,\n    init() {\n      const project = JSON.parse(this.$el.dataset.project);\n      const { billingType } = this.$el.dataset;\n      if (project) {\n        this.selectedProject = project;\n      }\n      this.billingType = billingType;\n    },\n    handleCreateProjectClick() {\n      this.showProjectCreateForm = true;\n      this.$dispatch(\"create:project\");\n    },\n    handleCancelProjectCreation() {\n      this.showProjectCreateForm = false;\n    },\n    showProjectList() {\n      return this.showProjectCreateForm === false;\n    },\n    handleClearSelected() {\n      this.selectedProject = null;\n    },\n    handleCancelTaskCreation() {\n      document.dispatchEvent(new Event(\"task:add:cancelled\"));\n    },\n  };\n}\n", "export default function timesheet() {\n  return {\n    view: \"daily\",\n    currentDate: new Date(),\n    formatDateHeader() {\n      const date = this.currentDate;\n      const options = {\n        weekday: \"long\",\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\",\n      };\n\n      if (this.view === \"daily\") {\n        return date.toLocaleDateString(\"en-US\", options);\n      } else if (this.view === \"weekly\") {\n        const startOfWeek = new Date(date);\n        const day = date.getDay();\n        const diff = date.getDate() - day + (day === 0 ? -6 : 1); // Adjust for Sunday\n        startOfWeek.setDate(diff);\n\n        const endOfWeek = new Date(startOfWeek);\n        endOfWeek.setDate(startOfWeek.getDate() + 6);\n\n        const startMonth = startOfWeek.toLocaleDateString(\"en-US\", {\n          month: \"long\",\n        });\n        const endMonth = endOfWeek.toLocaleDateString(\"en-US\", {\n          month: \"long\",\n        });\n\n        if (startMonth === endMonth) {\n          return `${startMonth} ${startOfWeek.getDate()} - ${endOfWeek.getDate()}, ${startOfWeek.getFullYear()}`;\n        } else {\n          return `${startMonth} ${startOfWeek.getDate()} - ${endMonth} ${endOfWeek.getDate()}, ${startOfWeek.getFullYear()}`;\n        }\n      } else if (this.view === \"monthly\") {\n        return date.toLocaleDateString(\"en-US\", {\n          month: \"long\",\n          year: \"numeric\",\n        });\n      }\n    },\n    calculateTopPosition(startTime) {\n      // Parse the start time (assuming format like \"09:00\" or \"09:00:00\")\n      const [hours, minutes] = startTime.split(\":\").map(Number);\n\n      // Calculate minutes since midnight\n      const minutesSinceMidnight = hours * 60 + minutes;\n\n      // Calculate position (assuming each hour is 60px tall in your timeline)\n      // This gives you pixels from the top of the timeline\n      const topPosition = (minutesSinceMidnight / 60) * 60; // 60px per hour\n\n      return `${topPosition}px`;\n    },\n    calculateHeight(startTime, endTime) {\n      // Parse times\n      const [startHours, startMinutes] = startTime.split(\":\").map(Number);\n      const [endHours, endMinutes] = endTime.split(\":\").map(Number);\n\n      // Calculate duration in minutes\n      const startMinutesSinceMidnight = startHours * 60 + startMinutes;\n      const endMinutesSinceMidnight = endHours * 60 + endMinutes;\n      const durationMinutes =\n        endMinutesSinceMidnight - startMinutesSinceMidnight;\n\n      // Calculate height (60px per hour = 1px per minute)\n      const height = durationMinutes;\n\n      return `${height}px`;\n    },\n    getPixelsPerHour() {\n      // Example: adjust based on screen width\n      return window.innerWidth < 768 ? 40 : 60; // 40px per hour on mobile, 60px on desktop\n    },\n  };\n}\n", "import flatpickr from \"flatpickr\";\n\nexport default function timesheetDatePicker() {\n  return {\n    flatpickrInstance: null,\n    init() {\n      this.flatpickrInstance = flatpickr(this.$el, {\n        maxDate: new Date(),\n        onChange: (selectedDates, dateStr, instance) => {\n          const url = new URL(window.location);\n          url.searchParams.set(\"date\", dateStr);\n          window.location = url.toString();\n        },\n      });\n    },\n  };\n}\n", "export default function timesheetsForm() {\n  return {\n    selectedTask: null,\n    showTaskCreateForm: false,\n    init() {\n      const { task } = this.$el.dataset;\n      if (task) {\n        this.selectedTask = JSON.parse(task);\n      }\n    },\n    taskDropdownName() {\n      return this.selectedTask?.name || \"Task\";\n    },\n    clearSelectedTask() {\n      this.selectedTask = null;\n    },\n    handleAddTaskClick() {\n      this.showTaskCreateForm = true;\n      this.$dispatch(\"get-task-create-form\");\n    },\n    hideTaskCreateForm() {\n      this.showTaskCreateForm = false;\n      this.$event.target.innerHTML = \"\";\n    },\n    showTaskSearchBox() {\n      return this.showTaskCreateForm === false;\n    },\n    taskFieldValue() {\n      return this.selectedTask ? this.selectedTask.id : \"\";\n    },\n  };\n}\n"],
  "mappings": "ijBAAA,IAAAA,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAIC,SAAUC,EAAQC,EAAS,CAC1B,OAAOH,IAAY,UAAY,OAAOC,GAAW,IAAcA,GAAO,QAAUE,EAAQ,EACxF,OAAO,QAAW,YAAc,OAAO,IAAM,OAAOA,CAAO,GAC1DD,EAAS,OAAO,WAAe,IAAc,WAAaA,GAAU,KAAMA,EAAO,YAAcC,EAAQ,EAC1G,GAAGH,GAAO,UAAY,CAAE,aAEtB,SAASI,EAAkBC,EAAGC,EAAGC,EAAG,CAClC,GAAkB,OAAOF,GAArB,WAAyBA,IAAMC,EAAID,EAAE,IAAIC,CAAC,EAAG,OAAO,UAAU,OAAS,EAAIA,EAAIC,EACnF,MAAM,IAAI,UAAU,+CAA+C,CACrE,CACA,SAASC,EAA2BH,EAAGC,EAAG,CACxC,GAAIA,EAAE,IAAID,CAAC,EAAG,MAAM,IAAI,UAAU,gEAAgE,CACpG,CACA,SAASI,EAAuBC,EAAGC,EAAG,CACpC,OAAOD,EAAE,IAAIN,EAAkBM,EAAGC,CAAC,CAAC,CACtC,CACA,SAASC,EAA2BP,EAAGC,EAAGK,EAAG,CAC3CH,EAA2BH,EAAGC,CAAC,EAAGA,EAAE,IAAID,EAAGM,CAAC,CAC9C,CACA,SAASE,EAAuBH,EAAGC,EAAGG,EAAG,CACvC,OAAOJ,EAAE,IAAIN,EAAkBM,EAAGC,CAAC,EAAGG,CAAC,EAAGA,CAC5C,CAEA,IAAMC,EAAwB,IAGxBC,EAAc,CAAC,EACfC,EAA6B,IAAM,CACnCD,EAAY,iCAAiC,aAC/CA,EAAY,sBAAsB,MAAM,EACxCA,EAAY,sBAAwB,MAC3B,SAAS,MAClB,SAAS,KAAK,MAAM,CAExB,EAQME,EAAuBC,GACpB,IAAI,QAAQC,GAAW,CAC5B,GAAI,CAACD,EACH,OAAOC,EAAQ,EAEjB,IAAMC,EAAI,OAAO,QACXC,EAAI,OAAO,QACjBN,EAAY,oBAAsB,WAAW,IAAM,CACjDC,EAA2B,EAC3BG,EAAQ,CACV,EAAGL,CAAqB,EAExB,OAAO,SAASM,EAAGC,CAAC,CACtB,CAAC,EAGGC,EAAa,SAabC,EADa,CAAC,YAAa,QAAS,cAAe,SAAU,QAAS,QAAS,cAAe,gBAAiB,QAAS,cAAe,OAAQ,OAAQ,QAAS,QAAS,iBAAkB,UAAW,UAAW,OAAQ,SAAU,SAAU,OAAQ,eAAgB,QAAS,QAAS,OAAQ,QAAS,SAAU,QAAS,WAAY,QAAS,WAAY,aAAc,cAAe,qBAAsB,iBAAkB,uBAAwB,gBAAiB,qBAAsB,SAAU,UAAW,SAAU,MAAO,YAAa,UAAW,WAAY,YAAa,SAAU,eAAgB,aAAc,cAAe,eAAgB,SAAU,eAAgB,aAAc,cAAe,eAAgB,WAAY,cAAe,kBAAmB,MAAO,qBAAsB,+BAAgC,oBAAqB,eAAgB,eAAgB,YAAa,gBAAiB,aAAc,YAAa,UAAU,EAC/4B,OAAO,CAACC,EAAKC,KAC1CD,EAAIC,CAAS,EAAIH,EAAaG,EACvBD,GACoB,CAAC,CAAC,EAIzBE,EADQ,CAAC,UAAW,UAAW,OAAQ,WAAY,OAAO,EACxC,OAAO,CAACF,EAAKG,KACnCH,EAAIG,CAAI,EAAIL,EAAaK,EAClBH,GACkB,CAAC,CAAC,EAEvBI,EAAgB,eAQhBC,EAAwBC,GAAOA,EAAI,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAI,MAAM,CAAC,EAOxEC,EAAOC,GAAW,CACtB,QAAQ,KAAK,GAAGJ,CAAa,IAAI,OAAOI,GAAY,SAAWA,EAAQ,KAAK,GAAG,EAAIA,CAAO,EAAE,CAC9F,EAOMC,EAAQD,GAAW,CACvB,QAAQ,MAAM,GAAGJ,CAAa,IAAII,CAAO,EAAE,CAC7C,EAQME,EAA2B,CAAC,EAO5BC,EAAWH,GAAW,CACrBE,EAAyB,SAASF,CAAO,IAC5CE,EAAyB,KAAKF,CAAO,EACrCD,EAAKC,CAAO,EAEhB,EAQMI,EAAuB,CAACC,EAAiBC,EAAa,OAAS,CACnEH,EAAS,IAAIE,CAAe,iEAAiEC,EAAa,SAASA,CAAU,aAAe,EAAE,EAAE,CAClJ,EASMC,EAAiBC,GAAO,OAAOA,GAAQ,WAAaA,EAAI,EAAIA,EAM5DC,EAAiBD,GAAOA,GAAO,OAAOA,EAAI,WAAc,WAMxDE,EAAYF,GAAOC,EAAeD,CAAG,EAAIA,EAAI,UAAU,EAAI,QAAQ,QAAQA,CAAG,EAM9EG,EAAYH,GAAOA,GAAO,QAAQ,QAAQA,CAAG,IAAMA,EAOnDI,EAAe,IAAM,SAAS,KAAK,cAAc,IAAIrB,EAAY,SAAS,EAAE,EAM5EsB,EAAoBC,GAAkB,CAC1C,IAAMC,EAAYH,EAAa,EAC/B,OAAOG,EAAYA,EAAU,cAAcD,CAAc,EAAI,IAC/D,EAMME,EAAiBvB,GACdoB,EAAkB,IAAIpB,CAAS,EAAE,EAMpCwB,EAAW,IAAMD,EAAezB,EAAY,KAAK,EAKjD2B,GAAU,IAAMF,EAAezB,EAAY,IAAI,EAK/C4B,GAAiB,IAAMH,EAAezB,EAAY,cAAc,CAAC,EAKjE6B,EAAW,IAAMJ,EAAezB,EAAY,KAAK,EAKjD8B,EAAmB,IAAML,EAAezB,EAAY,gBAAgB,CAAC,EAKrE+B,EAAW,IAAMN,EAAezB,EAAY,KAAK,EAKjDgC,EAAmB,IAAMP,EAAezB,EAAY,gBAAgB,CAAC,EAKrEiC,EAAuB,IAAMR,EAAezB,EAAY,oBAAoB,CAAC,EAK7EkC,EAAmB,IAAuCZ,EAAkB,IAAItB,EAAY,OAAO,KAAKA,EAAY,OAAO,EAAE,EAK7HmC,GAAkB,IAAuCb,EAAkB,IAAItB,EAAY,OAAO,KAAKA,EAAY,MAAM,EAAE,EAK3HoC,GAAgB,IAAuCd,EAAkB,IAAItB,EAAY,OAAO,KAAKA,EAAY,IAAI,EAAE,EAKvHqC,GAAgB,IAAMZ,EAAezB,EAAY,aAAa,CAAC,EAK/DsC,GAAY,IAAMhB,EAAkB,IAAItB,EAAY,MAAM,EAAE,EAK5DuC,GAAa,IAAMd,EAAezB,EAAY,OAAO,EAKrDwC,GAAY,IAAMf,EAAezB,EAAY,MAAM,EAKnDyC,GAAsB,IAAMhB,EAAezB,EAAY,oBAAoB,CAAC,EAK5E0C,GAAiB,IAAMjB,EAAezB,EAAY,KAAK,EAGvD2C,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBZC,GAAuB,IAAM,CACjC,IAAMC,EAAQnB,EAAS,EACvB,GAAI,CAACmB,EACH,MAAO,CAAC,EAGV,IAAMC,EAAgCD,EAAM,iBAAiB,qDAAqD,EAC5GE,EAAsC,MAAM,KAAKD,CAA6B,EAEnF,KAAK,CAAC3D,EAAG6D,KAAM,CACd,IAAMC,GAAY,SAAS9D,EAAE,aAAa,UAAU,GAAK,GAAG,EACtD+D,GAAY,SAASF,GAAE,aAAa,UAAU,GAAK,GAAG,EAC5D,OAAIC,GAAYC,GACP,EACED,GAAYC,GACd,GAEF,CACT,CAAC,EAGKC,EAAyBN,EAAM,iBAAiBF,EAAS,EACzDS,EAAiC,MAAM,KAAKD,CAAsB,EAAE,OAAOE,GAAMA,EAAG,aAAa,UAAU,IAAM,IAAI,EAC3H,MAAO,CAAC,GAAG,IAAI,IAAIN,EAAoC,OAAOK,CAA8B,CAAC,CAAC,EAAE,OAAOC,GAAMC,GAAYD,CAAE,CAAC,CAC9H,EAKME,GAAU,IACPC,GAAS,SAAS,KAAMxD,EAAY,KAAK,GAAK,CAACwD,GAAS,SAAS,KAAMxD,EAAY,aAAa,CAAC,GAAK,CAACwD,GAAS,SAAS,KAAMxD,EAAY,aAAa,CAAC,EAM5JyD,GAAU,IAAM,CACpB,IAAMZ,EAAQnB,EAAS,EACvB,OAAKmB,EAGEW,GAASX,EAAO7C,EAAY,KAAK,EAF/B,EAGX,EAKM0D,GAAY,IAAM,CACtB,IAAMb,EAAQnB,EAAS,EACvB,OAAKmB,EAGEA,EAAM,aAAa,cAAc,EAF/B,EAGX,EASMc,GAAe,CAACC,EAAMC,IAAS,CAEnC,GADAD,EAAK,YAAc,GACfC,EAAM,CAER,IAAMC,EADS,IAAI,UAAU,EACP,gBAAgBD,EAAM,WAAW,EACjDE,EAAOD,EAAO,cAAc,MAAM,EACpCC,GACF,MAAM,KAAKA,EAAK,UAAU,EAAE,QAAQC,IAAS,CAC3CJ,EAAK,YAAYI,EAAK,CACxB,CAAC,EAEH,IAAMC,EAAOH,EAAO,cAAc,MAAM,EACpCG,GACF,MAAM,KAAKA,EAAK,UAAU,EAAE,QAAQD,IAAS,CACvCA,cAAiB,kBAAoBA,cAAiB,iBACxDJ,EAAK,YAAYI,GAAM,UAAU,EAAI,CAAC,EAEtCJ,EAAK,YAAYI,EAAK,CAE1B,CAAC,CAEL,CACF,EAOMR,GAAW,CAACI,EAAM1D,IAAc,CACpC,GAAI,CAACA,EACH,MAAO,GAET,IAAMgE,EAAYhE,EAAU,MAAM,KAAK,EACvC,QAASiE,EAAI,EAAGA,EAAID,EAAU,OAAQC,IACpC,GAAI,CAACP,EAAK,UAAU,SAASM,EAAUC,CAAC,CAAC,EACvC,MAAO,GAGX,MAAO,EACT,EAMMC,GAAsB,CAACR,EAAMS,IAAW,CAC5C,MAAM,KAAKT,EAAK,SAAS,EAAE,QAAQ1D,GAAa,CAC1C,CAAC,OAAO,OAAOF,CAAW,EAAE,SAASE,CAAS,GAAK,CAAC,OAAO,OAAOC,CAAS,EAAE,SAASD,CAAS,GAAK,CAAC,OAAO,OAAOmE,EAAO,WAAa,CAAC,CAAC,EAAE,SAASnE,CAAS,GAC/J0D,EAAK,UAAU,OAAO1D,CAAS,CAEnC,CAAC,CACH,EAOMoE,GAAmB,CAACV,EAAMS,EAAQnE,IAAc,CAEpD,GADAkE,GAAoBR,EAAMS,CAAM,EAC5B,CAACA,EAAO,YACV,OAEF,IAAME,EAAcF,EAAO,YAAuDnE,CAAU,EAC5F,GAAKqE,EAGL,IAAI,OAAOA,GAAgB,UAAY,CAACA,EAAY,QAAS,CAC3D/D,EAAK,+BAA+BN,CAAS,8CAA8C,OAAOqE,CAAW,GAAG,EAChH,MACF,CACAC,GAASZ,EAAMW,CAAW,EAC5B,EAOME,GAAa,CAAC5B,EAAO6B,IAAe,CACxC,GAAI,CAACA,EACH,OAAO,KAET,OAAQA,EAAY,CAClB,IAAK,SACL,IAAK,WACL,IAAK,OACH,OAAO7B,EAAM,cAAc,IAAI7C,EAAY,KAAK,OAAOA,EAAY0E,CAAU,CAAC,EAAE,EAClF,IAAK,WACH,OAAO7B,EAAM,cAAc,IAAI7C,EAAY,KAAK,OAAOA,EAAY,QAAQ,QAAQ,EACrF,IAAK,QACH,OAAO6C,EAAM,cAAc,IAAI7C,EAAY,KAAK,OAAOA,EAAY,KAAK,gBAAgB,GAAK6C,EAAM,cAAc,IAAI7C,EAAY,KAAK,OAAOA,EAAY,KAAK,oBAAoB,EACpL,IAAK,QACH,OAAO6C,EAAM,cAAc,IAAI7C,EAAY,KAAK,OAAOA,EAAY,KAAK,QAAQ,EAClF,QACE,OAAO6C,EAAM,cAAc,IAAI7C,EAAY,KAAK,OAAOA,EAAY,KAAK,EAAE,CAC9E,CACF,EAKM2E,GAAaC,GAAS,CAI1B,GAHAA,EAAM,MAAM,EAGRA,EAAM,OAAS,OAAQ,CAEzB,IAAMC,EAAMD,EAAM,MAClBA,EAAM,MAAQ,GACdA,EAAM,MAAQC,CAChB,CACF,EAOMC,GAAc,CAACC,EAAQb,EAAWc,IAAc,CAChD,CAACD,GAAU,CAACb,IAGZ,OAAOA,GAAc,WACvBA,EAAYA,EAAU,MAAM,KAAK,EAAE,OAAO,OAAO,GAEnDA,EAAU,QAAQhE,GAAa,CACzB,MAAM,QAAQ6E,CAAM,EACtBA,EAAO,QAAQnB,GAAQ,CACjBoB,EACFpB,EAAK,UAAU,IAAI1D,CAAS,EAE5B0D,EAAK,UAAU,OAAO1D,CAAS,CAEnC,CAAC,EAEG8E,EACFD,EAAO,UAAU,IAAI7E,CAAS,EAE9B6E,EAAO,UAAU,OAAO7E,CAAS,CAGvC,CAAC,EACH,EAMMsE,GAAW,CAACO,EAAQb,IAAc,CACtCY,GAAYC,EAAQb,EAAW,EAAI,CACrC,EAMMe,GAAc,CAACF,EAAQb,IAAc,CACzCY,GAAYC,EAAQb,EAAW,EAAK,CACtC,EASMgB,GAAwB,CAACtB,EAAM1D,IAAc,CACjD,IAAMiF,EAAW,MAAM,KAAKvB,EAAK,QAAQ,EACzC,QAASO,EAAI,EAAGA,EAAIgB,EAAS,OAAQhB,IAAK,CACxC,IAAMH,EAAQmB,EAAShB,CAAC,EACxB,GAAIH,aAAiB,aAAeR,GAASQ,EAAO9D,CAAS,EAC3D,OAAO8D,CAEX,CACF,EAOMoB,GAAsB,CAACxB,EAAMyB,EAAUC,IAAU,CACjDA,IAAU,GAAG,SAASA,CAAK,CAAC,KAC9BA,EAAQ,SAASA,CAAK,GAEpBA,GAAS,SAASA,CAAK,IAAM,EAC/B1B,EAAK,MAAM,YAAYyB,EAAU,OAAOC,GAAU,SAAW,GAAGA,CAAK,KAAOA,CAAK,EAEjF1B,EAAK,MAAM,eAAeyB,CAAQ,CAEtC,EAMME,GAAO,CAAC3B,EAAM4B,EAAU,SAAW,CAClC5B,IAGLA,EAAK,MAAM,QAAU4B,EACvB,EAKMC,GAAO7B,GAAQ,CACdA,IAGLA,EAAK,MAAM,QAAU,OACvB,EAMM8B,GAA2B,CAAC9B,EAAM4B,EAAU,UAAY,CACvD5B,GAGL,IAAI,iBAAiB,IAAM,CACzB+B,GAAO/B,EAAMA,EAAK,UAAW4B,CAAO,CACtC,CAAC,EAAE,QAAQ5B,EAAM,CACf,UAAW,GACX,QAAS,EACX,CAAC,CACH,EAQMgC,GAAW,CAACC,EAAQC,EAAUT,EAAUC,IAAU,CAEtD,IAAMjC,EAAKwC,EAAO,cAAcC,CAAQ,EACpCzC,GACFA,EAAG,MAAM,YAAYgC,EAAUC,CAAK,CAExC,EAOMK,GAAS,CAAC/B,EAAMoB,EAAWQ,EAAU,SAAW,CAChDR,EACFO,GAAK3B,EAAM4B,CAAO,EAElBC,GAAK7B,CAAI,CAEb,EAQMN,GAAcM,GAAQ,CAAC,EAAEA,IAASA,EAAK,aAAeA,EAAK,cAAgBA,EAAK,eAAe,EAAE,SAKjGmC,GAAsB,IAAM,CAACzC,GAAYpB,EAAiB,CAAC,GAAK,CAACoB,GAAYlB,GAAc,CAAC,GAAK,CAACkB,GAAYnB,GAAgB,CAAC,EAM/H6D,GAAepC,GAAWA,EAAK,aAAeA,EAAK,aAOnDqC,GAA2B,CAACC,EAASC,IAAgB,CACzD,IAAIN,EAASK,EACb,KAAOL,GAAUA,IAAWM,GAAa,CACvC,GAAIH,GAAaH,CAAM,EACrB,MAAO,GAETA,EAASA,EAAO,aAClB,CACA,MAAO,EACT,EAQMO,GAAkBxC,GAAQ,CAC9B,IAAMyC,EAAQ,OAAO,iBAAiBzC,CAAI,EACpC0C,EAAe,WAAWD,EAAM,iBAAiB,oBAAoB,GAAK,GAAG,EAC7EE,EAAgB,WAAWF,EAAM,iBAAiB,qBAAqB,GAAK,GAAG,EACrF,OAAOC,EAAe,GAAKC,EAAgB,CAC7C,EAMMC,GAA0B,CAACC,EAAOC,EAAQ,KAAU,CACxD,IAAMC,EAAmBlE,GAAoB,EACxCkE,GAGDrD,GAAYqD,CAAgB,IAC1BD,IACFC,EAAiB,MAAM,WAAa,OACpCA,EAAiB,MAAM,MAAQ,QAEjC,WAAW,IAAM,CACfA,EAAiB,MAAM,WAAa,SAASF,EAAQ,GAAI,WACzDE,EAAiB,MAAM,MAAQ,IACjC,EAAG,EAAE,EAET,EACMC,GAAuB,IAAM,CACjC,IAAMD,EAAmBlE,GAAoB,EAC7C,GAAI,CAACkE,EACH,OAEF,IAAME,EAAwB,SAAS,OAAO,iBAAiBF,CAAgB,EAAE,KAAK,EACtFA,EAAiB,MAAM,eAAe,YAAY,EAClDA,EAAiB,MAAM,MAAQ,OAC/B,IAAMG,EAA4B,SAAS,OAAO,iBAAiBH,CAAgB,EAAE,KAAK,EACpFI,EAA0BF,EAAwBC,EAA4B,IACpFH,EAAiB,MAAM,MAAQ,GAAGI,CAAuB,GAC3D,EAOMC,GAAY,IAAM,OAAO,OAAW,KAAe,OAAO,SAAa,IAEvEC,GAAY;AAAA,yBACKjH,EAAY,KAAK,uBAAuBA,EAAY,gBAAgB,CAAC,YAAYA,EAAY,KAAK;AAAA,kCACzFA,EAAY,KAAK;AAAA,gBACnCA,EAAY,gBAAgB,CAAC;AAAA,iBAC5BA,EAAY,IAAI;AAAA,iBAChBA,EAAY,KAAK;AAAA,gBAClBA,EAAY,KAAK,SAASA,EAAY,KAAK;AAAA,iBAC1CA,EAAY,gBAAgB,CAAC,SAASA,EAAY,gBAAgB,CAAC;AAAA,mBACjEA,EAAY,KAAK,SAASA,EAAY,KAAK;AAAA,+BAC/BA,EAAY,IAAI;AAAA,iBAC9BA,EAAY,KAAK;AAAA;AAAA;AAAA;AAAA,oBAIdA,EAAY,MAAM,SAASA,EAAY,MAAM;AAAA,iBAChDA,EAAY,KAAK;AAAA,mBACfA,EAAY,QAAQ;AAAA,kCACLA,EAAY,QAAQ;AAAA,oBAClCA,EAAY,KAAK;AAAA;AAAA,sBAEfA,EAAY,QAAQ,SAASA,EAAY,QAAQ;AAAA,iBACtDA,EAAY,oBAAoB,CAAC,SAASA,EAAY,oBAAoB,CAAC;AAAA,iBAC3EA,EAAY,OAAO;AAAA,mBACjBA,EAAY,MAAM;AAAA,oCACDA,EAAY,OAAO;AAAA,oCACnBA,EAAY,IAAI;AAAA,oCAChBA,EAAY,MAAM;AAAA;AAAA,iBAErCA,EAAY,MAAM;AAAA,iBAClBA,EAAY,8BAA8B,CAAC;AAAA,mBACzCA,EAAY,oBAAoB,CAAC;AAAA;AAAA;AAAA,EAGlD,QAAQ,aAAc,EAAE,EAKlBkH,GAAoB,IAAM,CAC9B,IAAMC,EAAe9F,EAAa,EAClC,OAAK8F,GAGLA,EAAa,OAAO,EACpBlC,GAAY,CAAC,SAAS,gBAAiB,SAAS,IAAI,EAAG,CAACjF,EAAY,aAAa,EAAGA,EAAY,aAAa,EAAGA,EAAY,YAAY,CAAC,CAAC,EACnI,IAJE,EAKX,EACMoH,GAA2B,IAAM,CACrC5H,EAAY,gBAAgB,uBAAuB,CACrD,EACM6H,GAA0B,IAAM,CACpC,IAAMxE,EAAQnB,EAAS,EACjBkD,EAAQM,GAAsBrC,EAAO7C,EAAY,KAAK,EACtDsH,EAAOpC,GAAsBrC,EAAO7C,EAAY,IAAI,EAEpDuH,EAAQ1E,EAAM,cAAc,IAAI7C,EAAY,KAAK,QAAQ,EAEzDwH,EAAc3E,EAAM,cAAc,IAAI7C,EAAY,KAAK,SAAS,EAChEyH,EAASvC,GAAsBrC,EAAO7C,EAAY,MAAM,EAExD0H,GAAW7E,EAAM,cAAc,IAAI7C,EAAY,QAAQ,QAAQ,EAC/D2H,GAAWzC,GAAsBrC,EAAO7C,EAAY,QAAQ,EAClE4E,EAAM,QAAUwC,GAChBE,EAAK,SAAWF,GAChBK,EAAO,SAAWL,GAClBM,GAAS,SAAWN,GACpBO,GAAS,QAAUP,GACnBG,EAAM,QAAU,IAAM,CACpBH,GAAyB,EACzBI,EAAY,MAAQD,EAAM,KAC5B,EACAA,EAAM,SAAW,IAAM,CACrBH,GAAyB,EACzBI,EAAY,MAAQD,EAAM,KAC5B,CACF,EAMMK,GAAY7C,GAAU,OAAOA,GAAW,SAAW,SAAS,cAAcA,CAAM,EAAIA,EAKpF8C,GAAqBxD,GAAU,CACnC,IAAMxB,EAAQnB,EAAS,EACvBmB,EAAM,aAAa,OAAQwB,EAAO,MAAQ,QAAU,QAAQ,EAC5DxB,EAAM,aAAa,YAAawB,EAAO,MAAQ,SAAW,WAAW,EAChEA,EAAO,OACVxB,EAAM,aAAa,aAAc,MAAM,CAE3C,EAKMiF,EAAWC,GAAiB,CAC5B,OAAO,iBAAiBA,CAAa,EAAE,YAAc,OACvDvD,GAASnD,EAAa,EAAGrB,EAAY,GAAG,CAE5C,EAOMgI,EAAO3D,GAAU,CAErB,IAAM4D,EAAsBf,GAAkB,EAC9C,GAAIF,GAAU,EAAG,CACftG,EAAM,6CAA6C,EACnD,MACF,CACA,IAAMc,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAYxB,EAAY,UAC9BiI,GACFzD,GAAShD,EAAWxB,EAAY,eAAe,CAAC,EAElD2D,GAAanC,EAAWyF,EAAS,EACjCzF,EAAU,QAAQ,WAAgB6C,EAAO,MACzC,IAAM0D,EAAgBH,GAAUvD,EAAO,MAAM,EAC7C0D,EAAc,YAAYvG,CAAS,EAC/B6C,EAAO,WACT7C,EAAU,aAAa,UAAW,EAAE,EACpCA,EAAU,YAAY,GAExBqG,GAAmBxD,CAAM,EACzByD,EAASC,CAAa,EACtBV,GAAwB,CAC1B,EAMMa,EAAuB,CAACC,EAAOpD,IAAW,CAE1CoD,aAAiB,YACnBpD,EAAO,YAAYoD,CAAK,EAIjB,OAAOA,GAAU,SACxBC,EAAaD,EAAOpD,CAAM,EAInBoD,GACPxE,GAAaoB,EAAQoD,CAAK,CAE9B,EAMMC,EAAe,CAACD,EAAOpD,IAAW,CAElCoD,EAAM,OACRE,EAAiBtD,EAAQoD,CAAK,EAK9BxE,GAAaoB,EAAQoD,EAAM,SAAS,CAAC,CAEzC,EAMME,EAAmB,CAACtD,EAAQnB,IAAS,CAEzC,GADAmB,EAAO,YAAc,GACjB,KAAKnB,EACP,QAASO,EAAI,EAAGA,KAAKP,EAAMO,IACzBY,EAAO,YAAYnB,EAAKO,CAAC,EAAE,UAAU,EAAI,CAAC,OAG5CY,EAAO,YAAYnB,EAAK,UAAU,EAAI,CAAC,CAE3C,EAMM0E,EAAgB,CAACC,EAAUlE,IAAW,CAC1C,IAAMmE,EAAUjG,GAAW,EACrBkG,EAASnG,GAAU,EACrB,CAACkG,GAAW,CAACC,IAKb,CAACpE,EAAO,mBAAqB,CAACA,EAAO,gBAAkB,CAACA,EAAO,iBACjEoB,GAAK+C,CAAO,EAEZjD,GAAKiD,CAAO,EAIdlE,GAAiBkE,EAASnE,EAAQ,SAAS,EAG3CqE,GAAcF,EAASC,EAAQpE,CAAM,EAGrCV,GAAa8E,EAAQpE,EAAO,YAAc,EAAE,EAC5CC,GAAiBmE,EAAQpE,EAAQ,QAAQ,EAC3C,EAOA,SAASqE,GAAcF,EAASC,EAAQpE,EAAQ,CAC9C,IAAMsE,EAAgBzG,EAAiB,EACjC0G,EAAaxG,GAAc,EAC3ByG,EAAe1G,GAAgB,EACjC,CAACwG,GAAiB,CAACC,GAAc,CAACC,IAKtCC,EAAaH,EAAe,UAAWtE,CAAM,EAC7CyE,EAAaF,EAAY,OAAQvE,CAAM,EACvCyE,EAAaD,EAAc,SAAUxE,CAAM,EAC3C0E,EAAqBJ,EAAeC,EAAYC,EAAcxE,CAAM,EAChEA,EAAO,iBACLA,EAAO,OACTmE,EAAQ,aAAaK,EAAcF,CAAa,EAChDH,EAAQ,aAAaI,EAAYD,CAAa,IAE9CH,EAAQ,aAAaK,EAAcJ,CAAM,EACzCD,EAAQ,aAAaI,EAAYH,CAAM,EACvCD,EAAQ,aAAaG,EAAeF,CAAM,IAGhD,CAQA,SAASM,EAAqBJ,EAAeC,EAAYC,EAAcxE,EAAQ,CAC7E,GAAI,CAACA,EAAO,eAAgB,CAC1BY,GAAY,CAAC0D,EAAeC,EAAYC,CAAY,EAAG7I,EAAY,MAAM,EACzE,MACF,CACAwE,GAAS,CAACmE,EAAeC,EAAYC,CAAY,EAAG7I,EAAY,MAAM,EAGlEqE,EAAO,oBACTsE,EAAc,MAAM,YAAY,0CAA2CtE,EAAO,kBAAkB,EAElGA,EAAO,iBACTuE,EAAW,MAAM,YAAY,uCAAwCvE,EAAO,eAAe,EAEzFA,EAAO,mBACTwE,EAAa,MAAM,YAAY,yCAA0CxE,EAAO,iBAAiB,EAInG2E,GAAkBL,CAAa,EAC/BK,GAAkBJ,CAAU,EAC5BI,GAAkBH,CAAY,CAChC,CAKA,SAASG,GAAkBC,EAAQ,CACjC,IAAMC,EAAc,OAAO,iBAAiBD,CAAM,EAClD,GAAIC,EAAY,iBAAiB,wCAAwC,EAEvE,OAEF,IAAMC,EAAeD,EAAY,gBAAgB,QAAQ,+BAAgC,uBAAuB,EAChHD,EAAO,MAAM,YAAY,yCAA0CC,EAAY,iBAAiB,iBAAiB,EAAE,QAAQ,YAAa,IAAIC,CAAY,EAAE,CAAC,CAC7J,CAOA,SAASL,EAAaG,EAAQG,EAAY/E,EAAQ,CAChD,IAAMgF,EAAyD/I,EAAsB8I,CAAU,EAC/FzD,GAAOsD,EAAQ5E,EAAO,OAAOgF,CAAU,QAAQ,EAAG,cAAc,EAChE1F,GAAasF,EAAQ5E,EAAO,GAAG+E,CAAU,YAAY,GAAK,EAAE,EAC5DH,EAAO,aAAa,aAAc5E,EAAO,GAAG+E,CAAU,iBAAiB,GAAK,EAAE,EAG9EH,EAAO,UAAYjJ,EAAYoJ,CAAU,EACzC9E,GAAiB2E,EAAQ5E,EAAQ,GAAG+E,CAAU,QAAQ,CACxD,CAMA,IAAME,EAAoB,CAACf,EAAUlE,IAAW,CAC9C,IAAMkF,EAAc7G,GAAe,EAC9B6G,IAGL5F,GAAa4F,EAAalF,EAAO,iBAAmB,EAAE,EAGtDC,GAAiBiF,EAAalF,EAAQ,aAAa,EACnDsB,GAAO4D,EAAalF,EAAO,eAAe,EAC1CkF,EAAY,aAAa,aAAclF,EAAO,sBAAwB,EAAE,EAC1E,EAMMmF,GAAkB,CAACjB,EAAUlE,IAAW,CAC5C,IAAM7C,EAAYH,EAAa,EAC1BG,IAGLiI,GAAoBjI,EAAW6C,EAAO,QAAQ,EAC9CqF,GAAoBlI,EAAW6C,EAAO,QAAQ,EAC9CsF,GAAgBnI,EAAW6C,EAAO,IAAI,EAGtCC,GAAiB9C,EAAW6C,EAAQ,WAAW,EACjD,EAMA,SAASoF,GAAoBjI,EAAWoI,EAAU,CAC5C,OAAOA,GAAa,SACtBpI,EAAU,MAAM,WAAaoI,EACnBA,GACVpF,GAAS,CAAC,SAAS,gBAAiB,SAAS,IAAI,EAAGxE,EAAY,aAAa,CAAC,CAElF,CAMA,SAAS0J,GAAoBlI,EAAWqI,EAAU,CAC3CA,IAGDA,KAAY7J,EACdwE,GAAShD,EAAWxB,EAAY6J,CAAQ,CAAC,GAEzCrJ,EAAK,+DAA+D,EACpEgE,GAAShD,EAAWxB,EAAY,MAAM,GAE1C,CAMA,SAAS2J,GAAgBnI,EAAWsI,EAAM,CACnCA,GAGLtF,GAAShD,EAAWxB,EAAY,QAAQ8J,CAAI,EAAE,CAAC,CACjD,CAYA,IAAIC,GAAe,CACjB,YAAa,IAAI,QACjB,SAAU,IAAI,OAChB,EAMA,IAAMC,GAAe,CAAC,QAAS,OAAQ,QAAS,SAAU,QAAS,WAAY,UAAU,EAMnFC,GAAc,CAAC1B,EAAUlE,IAAW,CACxC,IAAMxB,EAAQnB,EAAS,EACvB,GAAI,CAACmB,EACH,OAEF,IAAMqH,EAAcH,GAAa,YAAY,IAAIxB,CAAQ,EACnD4B,EAAW,CAACD,GAAe7F,EAAO,QAAU6F,EAAY,MAC9DF,GAAa,QAAQtF,GAAc,CACjC,IAAM0F,GAAiBlF,GAAsBrC,EAAO7C,EAAY0E,CAAU,CAAC,EACtE0F,KAKLC,GAAc3F,EAAYL,EAAO,eAAe,EAGhD+F,GAAe,UAAYpK,EAAY0E,CAAU,EAC7CyF,GACF1E,GAAK2E,EAAc,EAEvB,CAAC,EACG/F,EAAO,QACL8F,GACFG,GAAUjG,CAAM,EAGlBkG,GAAelG,CAAM,EAEzB,EAKMiG,GAAYjG,GAAU,CAC1B,GAAI,CAACA,EAAO,MACV,OAEF,GAAI,CAACmG,GAAgBnG,EAAO,KAAK,EAAG,CAClC3D,EAAM,sCAAsC,OAAO,KAAK8J,EAAe,EAAE,KAAK,KAAK,CAAC,UAAUnG,EAAO,KAAK,GAAG,EAC7G,MACF,CACA,IAAM+F,EAAiBK,GAAkBpG,EAAO,KAAK,EACrD,GAAI,CAAC+F,EACH,OAEF,IAAMxF,EAAQ4F,GAAgBnG,EAAO,KAAK,EAAE+F,EAAgB/F,CAAM,EAClEkB,GAAK6E,CAAc,EAGf/F,EAAO,gBACT,WAAW,IAAM,CACfM,GAAWC,CAAK,CAClB,CAAC,CAEL,EAKM8F,GAAmB9F,GAAS,CAChC,QAAST,EAAI,EAAGA,EAAIS,EAAM,WAAW,OAAQT,IAAK,CAChD,IAAMwG,EAAW/F,EAAM,WAAWT,CAAC,EAAE,KAChC,CAAC,KAAM,OAAQ,QAAS,OAAO,EAAE,SAASwG,CAAQ,GACrD/F,EAAM,gBAAgB+F,CAAQ,CAElC,CACF,EAMMN,GAAgB,CAAC3F,EAAYkG,IAAoB,CACrD,IAAM/H,EAAQnB,EAAS,EACvB,GAAI,CAACmB,EACH,OAEF,IAAM+B,EAAQH,GAAW5B,EAAO6B,CAAU,EAC1C,GAAKE,EAGL,CAAA8F,GAAiB9F,CAAK,EACtB,QAAWiG,KAAQD,EACjBhG,EAAM,aAAaiG,EAAMD,EAAgBC,CAAI,CAAC,EAElD,EAKMN,GAAiBlG,GAAU,CAC/B,GAAI,CAACA,EAAO,MACV,OAEF,IAAM+F,EAAiBK,GAAkBpG,EAAO,KAAK,EACjD+F,GACF9F,GAAiB8F,EAAgB/F,EAAQ,OAAO,CAEpD,EAMMyG,GAAsB,CAAClG,EAAOP,IAAW,CACzC,CAACO,EAAM,aAAeP,EAAO,mBAC/BO,EAAM,YAAcP,EAAO,iBAE/B,EAOM0G,GAAgB,CAACnG,EAAOoG,EAAW3G,IAAW,CAClD,GAAIA,EAAO,WAAY,CACrB,IAAM4G,EAAQ,SAAS,cAAc,OAAO,EACtCC,EAAalL,EAAY,aAAa,EAC5CiL,EAAM,aAAa,MAAOrG,EAAM,EAAE,EAClCqG,EAAM,UAAYC,EACd,OAAO7G,EAAO,aAAgB,UAChCG,GAASyG,EAAO5G,EAAO,YAAY,UAAU,EAE/C4G,EAAM,UAAY5G,EAAO,WACzB2G,EAAU,sBAAsB,cAAeC,CAAK,CACtD,CACF,EAMMR,GAAoBU,GAAa,CACrC,IAAMtI,EAAQnB,EAAS,EACvB,GAAKmB,EAGL,OAAOqC,GAAsBrC,EAAO7C,EAAqCmL,CAAU,GAAKnL,EAAY,KAAK,CAC3G,EAMMoL,GAAwB,CAACxG,EAAOyG,IAAe,CAC/C,CAAC,SAAU,QAAQ,EAAE,SAAS,OAAOA,CAAU,EACjDzG,EAAM,MAAQ,GAAGyG,CAAU,GACjBjK,EAAUiK,CAAU,GAC9B7K,EAAK,iFAAiF,OAAO6K,CAAU,GAAG,CAE9G,EAGMb,GAAkB,CAAC,EAOzBA,GAAgB,KAAOA,GAAgB,MAAQA,GAAgB,SAAWA,GAAgB,OAASA,GAAgB,IAAMA,GAAgB,IAAMA,GAAgB,OAASA,GAAgB,KAAOA,GAAgB,gBAAgB,EAAIA,GAAgB,KAAOA,GAAgB,KAAOA,GAAgB,MACjS,CAAC5F,EAAOP,KACN+G,GAAsBxG,EAAOP,EAAO,UAAU,EAC9C0G,GAAcnG,EAAOA,EAAOP,CAAM,EAClCyG,GAAoBlG,EAAOP,CAAM,EACjCO,EAAM,KAAOP,EAAO,MACbO,GAQT4F,GAAgB,KAAO,CAAC5F,EAAOP,KAC7B0G,GAAcnG,EAAOA,EAAOP,CAAM,EAClCyG,GAAoBlG,EAAOP,CAAM,EAC1BO,GAQT4F,GAAgB,MAAQ,CAACjD,EAAOlD,IAAW,CACzC,IAAMiH,EAAa/D,EAAM,cAAc,OAAO,EACxCC,EAAcD,EAAM,cAAc,QAAQ,EAChD,OAAA6D,GAAsBE,EAAYjH,EAAO,UAAU,EACnDiH,EAAW,KAAOjH,EAAO,MACzB+G,GAAsB5D,EAAanD,EAAO,UAAU,EACpD0G,GAAcO,EAAY/D,EAAOlD,CAAM,EAChCkD,CACT,EAOAiD,GAAgB,OAAS,CAAC/C,EAAQpD,IAAW,CAE3C,GADAoD,EAAO,YAAc,GACjBpD,EAAO,iBAAkB,CAC3B,IAAMkH,EAAc,SAAS,cAAc,QAAQ,EACnD5H,GAAa4H,EAAalH,EAAO,gBAAgB,EACjDkH,EAAY,MAAQ,GACpBA,EAAY,SAAW,GACvBA,EAAY,SAAW,GACvB9D,EAAO,YAAY8D,CAAW,CAChC,CACA,OAAAR,GAActD,EAAQA,EAAQpD,CAAM,EAC7BoD,CACT,EAMA+C,GAAgB,MAAQgB,IACtBA,EAAM,YAAc,GACbA,GAQThB,GAAgB,SAAW,CAACiB,EAAmBpH,IAAW,CACxD,IAAMqD,EAAWjD,GAAW/C,EAAS,EAAG,UAAU,EAClDgG,EAAS,MAAQ,IACjBA,EAAS,QAAU,EAAQrD,EAAO,WAClC,IAAM4G,EAAQQ,EAAkB,cAAc,MAAM,EACpD,OAAA9H,GAAasH,EAAO5G,EAAO,kBAAoBA,EAAO,UAAU,EACzDqD,CACT,EAOA8C,GAAgB,SAAW,CAAC7C,EAAUtD,IAAW,CAC/C+G,GAAsBzD,EAAUtD,EAAO,UAAU,EACjDyG,GAAoBnD,EAAUtD,CAAM,EACpC0G,GAAcpD,EAAUA,EAAUtD,CAAM,EAMxC,IAAMqH,EAAYrI,GAAM,SAAS,OAAO,iBAAiBA,CAAE,EAAE,UAAU,EAAI,SAAS,OAAO,iBAAiBA,CAAE,EAAE,WAAW,EAG3H,kBAAW,IAAM,CAEf,GAAI,qBAAsB,OAAQ,CAChC,IAAMsI,EAAoB,SAAS,OAAO,iBAAiBjK,EAAS,CAAC,EAAE,KAAK,EACtEkK,EAAwB,IAAM,CAElC,GAAI,CAAC,SAAS,KAAK,SAASjE,CAAQ,EAClC,OAEF,IAAMkE,EAAgBlE,EAAS,YAAc+D,EAAU/D,CAAQ,EAC3DkE,EAAgBF,EAClBjK,EAAS,EAAE,MAAM,MAAQ,GAAGmK,CAAa,KAEzCzG,GAAoB1D,EAAS,EAAG,QAAS2C,EAAO,KAAK,CAEzD,EACA,IAAI,iBAAiBuH,CAAqB,EAAE,QAAQjE,EAAU,CAC5D,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAC3B,CAAC,CACH,CACF,CAAC,EACMA,CACT,EAMA,IAAMmE,GAAgB,CAACvD,EAAUlE,IAAW,CAC1C,IAAM0H,EAAgBjK,EAAiB,EAClCiK,IAGLrG,GAAyBqG,CAAa,EACtCzH,GAAiByH,EAAe1H,EAAQ,eAAe,EAGnDA,EAAO,MACT6D,EAAqB7D,EAAO,KAAM0H,CAAa,EAC/CxG,GAAKwG,EAAe,OAAO,GAIpB1H,EAAO,MACd0H,EAAc,YAAc1H,EAAO,KACnCkB,GAAKwG,EAAe,OAAO,GAK3BtG,GAAKsG,CAAa,EAEpB9B,GAAY1B,EAAUlE,CAAM,EAC9B,EAMM2H,GAAe,CAACzD,EAAUlE,IAAW,CACzC,IAAM4H,EAASzJ,GAAU,EACpByJ,IAGLvG,GAAyBuG,CAAM,EAC/BtG,GAAOsG,EAAQ5H,EAAO,OAAQ,OAAO,EACjCA,EAAO,QACT6D,EAAqB7D,EAAO,OAAQ4H,CAAM,EAI5C3H,GAAiB2H,EAAQ5H,EAAQ,QAAQ,EAC3C,EAMM6H,GAAa,CAAC3D,EAAUlE,IAAW,CACvC,IAAM6F,EAAcH,GAAa,YAAY,IAAIxB,CAAQ,EACnDnI,EAAOuB,GAAQ,EACrB,GAAI,CAACvB,EACH,OAIF,GAAI8J,GAAe7F,EAAO,OAAS6F,EAAY,KAAM,CAEnDiC,GAAW/L,EAAMiE,CAAM,EACvB+H,GAAYhM,EAAMiE,CAAM,EACxB,MACF,CACA,GAAI,CAACA,EAAO,MAAQ,CAACA,EAAO,SAAU,CACpCoB,GAAKrF,CAAI,EACT,MACF,CACA,GAAIiE,EAAO,MAAQ,OAAO,KAAKlE,CAAS,EAAE,QAAQkE,EAAO,IAAI,IAAM,GAAI,CACrE3D,EAAM,oFAAoF2D,EAAO,IAAI,GAAG,EACxGoB,GAAKrF,CAAI,EACT,MACF,CACAmF,GAAKnF,CAAI,EAGT+L,GAAW/L,EAAMiE,CAAM,EACvB+H,GAAYhM,EAAMiE,CAAM,EAGxBG,GAASpE,EAAMiE,EAAO,WAAaA,EAAO,UAAU,IAAI,EAG3B,OAAO,WAAW,8BAA8B,EACxD,iBAAiB,SAAUgI,EAAgC,CAClF,EAMMD,GAAc,CAAChM,EAAMiE,IAAW,CACpC,OAAW,CAACiI,EAAUC,CAAa,IAAK,OAAO,QAAQpM,CAAS,EAC1DkE,EAAO,OAASiI,GAClBrH,GAAY7E,EAAMmM,CAAa,EAGnC/H,GAASpE,EAAMiE,EAAO,MAAQlE,EAAUkE,EAAO,IAAI,CAAC,EAGpDmI,GAASpM,EAAMiE,CAAM,EAGrBgI,GAAiC,EAGjC/H,GAAiBlE,EAAMiE,EAAQ,MAAM,CACvC,EAGMgI,GAAmC,IAAM,CAC7C,IAAMxJ,EAAQnB,EAAS,EACvB,GAAI,CAACmB,EACH,OAEF,IAAM4J,EAAuB,OAAO,iBAAiB5J,CAAK,EAAE,iBAAiB,kBAAkB,EAEzF6J,EAAmB7J,EAAM,iBAAiB,0DAA0D,EAC1G,QAASsB,EAAI,EAAGA,EAAIuI,EAAiB,OAAQvI,IAC3CuI,EAAiBvI,CAAC,EAAE,MAAM,gBAAkBsI,CAEhD,EAOME,GAAkBtI,GAAU;AAAA,IAChCA,EAAO,UAAY,uDAAyD,EAAE;AAAA;AAAA;AAAA,IAG9EA,EAAO,UAAY,wCAA0C,EAAE;AAAA,IAC/DA,EAAO,UAAY,wDAA0D,EAAE;AAAA,EAE3EuI,GAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhBT,GAAa,CAAC/L,EAAMiE,IAAW,CACnC,GAAI,CAACA,EAAO,MAAQ,CAACA,EAAO,SAC1B,OAEF,IAAIwI,EAAazM,EAAK,UAClB0M,EAAa,GACbzI,EAAO,SACTyI,EAAaC,GAAY1I,EAAO,QAAQ,EAC/BA,EAAO,OAAS,WACzByI,EAAaH,GAAgBtI,CAAM,EACnCwI,EAAaA,EAAW,QAAQ,gBAAiB,EAAE,GAC1CxI,EAAO,OAAS,QACzByI,EAAaF,GACJvI,EAAO,OAMhByI,EAAaC,GALW,CACtB,SAAU,IACV,QAAS,IACT,KAAM,GACR,EACyC1I,EAAO,IAAI,CAAC,GAEnDwI,EAAW,KAAK,IAAMC,EAAW,KAAK,GACxCnJ,GAAavD,EAAM0M,CAAU,CAEjC,EAMMN,GAAW,CAACpM,EAAMiE,IAAW,CACjC,GAAKA,EAAO,UAGZ,CAAAjE,EAAK,MAAM,MAAQiE,EAAO,UAC1BjE,EAAK,MAAM,YAAciE,EAAO,UAChC,QAAW2I,IAAO,CAAC,0BAA2B,2BAA4B,0BAA2B,0BAA0B,EAC7HpH,GAASxF,EAAM4M,EAAK,mBAAoB3I,EAAO,SAAS,EAE1DuB,GAASxF,EAAM,sBAAuB,eAAgBiE,EAAO,SAAS,EACxE,EAMM0I,GAAcE,GAAW,eAAejN,EAAY,cAAc,CAAC,KAAKiN,CAAO,SAM/EC,GAAc,CAAC3E,EAAUlE,IAAW,CACxC,IAAM8I,EAAQpL,EAAS,EACvB,GAAKoL,EAGL,IAAI,CAAC9I,EAAO,SAAU,CACpBoB,GAAK0H,CAAK,EACV,MACF,CACA5H,GAAK4H,EAAO,EAAE,EAGdA,EAAM,aAAa,MAAO9I,EAAO,QAAQ,EACzC8I,EAAM,aAAa,MAAO9I,EAAO,UAAY,EAAE,EAG/Ce,GAAoB+H,EAAO,QAAS9I,EAAO,UAAU,EACrDe,GAAoB+H,EAAO,SAAU9I,EAAO,WAAW,EAGvD8I,EAAM,UAAYnN,EAAY,MAC9BsE,GAAiB6I,EAAO9I,EAAQ,OAAO,EACzC,EAEI+I,GAAW,GACXC,GAAa,EACbC,GAAa,EACbC,GAAW,EACXC,GAAW,EAKTC,GAAwB5K,GAAS,CACrCA,EAAM,iBAAiB,YAAa6K,EAAI,EACxC,SAAS,KAAK,iBAAiB,YAAaC,EAAI,EAChD9K,EAAM,iBAAiB,UAAW+K,EAAE,EACpC/K,EAAM,iBAAiB,aAAc6K,EAAI,EACzC,SAAS,KAAK,iBAAiB,YAAaC,EAAI,EAChD9K,EAAM,iBAAiB,WAAY+K,EAAE,CACvC,EAKMC,GAA2BhL,GAAS,CACxCA,EAAM,oBAAoB,YAAa6K,EAAI,EAC3C,SAAS,KAAK,oBAAoB,YAAaC,EAAI,EACnD9K,EAAM,oBAAoB,UAAW+K,EAAE,EACvC/K,EAAM,oBAAoB,aAAc6K,EAAI,EAC5C,SAAS,KAAK,oBAAoB,YAAaC,EAAI,EACnD9K,EAAM,oBAAoB,WAAY+K,EAAE,CAC1C,EAKMF,GAAOI,GAAS,CACpB,IAAMjL,EAAQnB,EAAS,EACvB,GAAIoM,EAAM,SAAWjL,GAASlB,GAAQ,EAAE,SAAmCmM,EAAM,MAAM,EAAG,CACxFV,GAAW,GACX,IAAMW,EAAWC,GAAYF,CAAK,EAClCT,GAAaU,EAAS,QACtBT,GAAaS,EAAS,QACtBR,GAAW,SAAS1K,EAAM,MAAM,gBAAgB,GAAK,EACrD2K,GAAW,SAAS3K,EAAM,MAAM,eAAe,GAAK,EACpD2B,GAAS3B,EAAO,gBAAgB,CAClC,CACF,EAKM8K,GAAOG,GAAS,CACpB,IAAMjL,EAAQnB,EAAS,EACvB,GAAI0L,GAAU,CACZ,GAAI,CACF,QAAAa,EACA,QAAAC,CACF,EAAIF,GAAYF,CAAK,EACrBjL,EAAM,MAAM,iBAAmB,GAAG0K,IAAYU,EAAUZ,GAAW,KACnExK,EAAM,MAAM,gBAAkB,GAAG2K,IAAYU,EAAUZ,GAAW,IACpE,CACF,EACMM,GAAK,IAAM,CACf,IAAM/K,EAAQnB,EAAS,EACvB0L,GAAW,GACXnI,GAAYpC,EAAO,gBAAgB,CACrC,EAMMmL,GAAcF,GAAS,CAC3B,IAAIG,EAAU,EACZC,EAAU,EACZ,OAAIJ,EAAM,KAAK,WAAW,OAAO,GAC/BG,EAAmCH,EAAM,QACzCI,EAAmCJ,EAAM,SAChCA,EAAM,KAAK,WAAW,OAAO,IACtCG,EAAmCH,EAAM,QAAQ,CAAC,EAAE,QACpDI,EAAmCJ,EAAM,QAAQ,CAAC,EAAE,SAE/C,CACL,QAAAG,EACA,QAAAC,CACF,CACF,EAMMC,GAAc,CAAC5F,EAAUlE,IAAW,CACxC,IAAM7C,EAAYH,EAAa,EACzBwB,EAAQnB,EAAS,EACvB,GAAI,GAACF,GAAa,CAACqB,GAMnB,IAAIwB,EAAO,MAAO,CAChBe,GAAoB5D,EAAW,QAAS6C,EAAO,KAAK,EACpDxB,EAAM,MAAM,MAAQ,OACpB,IAAM4F,EAASnG,GAAU,EACrBmG,GACF5F,EAAM,aAAa4F,EAAQ9G,GAAQ,CAAC,CAExC,MACEyD,GAAoBvC,EAAO,QAASwB,EAAO,KAAK,EAIlDe,GAAoBvC,EAAO,UAAWwB,EAAO,OAAO,EAGhDA,EAAO,QACTxB,EAAM,MAAM,MAAQwB,EAAO,OAIzBA,EAAO,aACTxB,EAAM,MAAM,WAAawB,EAAO,YAElCoB,GAAKxD,EAAqB,CAAC,EAG3BmM,GAAavL,EAAOwB,CAAM,EACtBA,EAAO,WAAa,CAACA,EAAO,OAC9BG,GAAS3B,EAAO7C,EAAY,SAAS,EACrCyN,GAAsB5K,CAAK,IAE3BoC,GAAYpC,EAAO7C,EAAY,SAAS,EACxC6N,GAAyBhL,CAAK,GAElC,EAMMuL,GAAe,CAACvL,EAAOwB,IAAW,CACtC,IAAMgK,EAAYhK,EAAO,WAAa,CAAC,EAEvCxB,EAAM,UAAY,GAAG7C,EAAY,KAAK,IAAIsD,GAAYT,CAAK,EAAIwL,EAAU,MAAQ,EAAE,GAC/EhK,EAAO,OACTG,GAAS,CAAC,SAAS,gBAAiB,SAAS,IAAI,EAAGxE,EAAY,aAAa,CAAC,EAC9EwE,GAAS3B,EAAO7C,EAAY,KAAK,GAEjCwE,GAAS3B,EAAO7C,EAAY,KAAK,EAInCsE,GAAiBzB,EAAOwB,EAAQ,OAAO,EAEnC,OAAOA,EAAO,aAAgB,UAChCG,GAAS3B,EAAOwB,EAAO,WAAW,EAIhCA,EAAO,MACTG,GAAS3B,EAAO7C,EAAY,QAAQqE,EAAO,IAAI,EAAE,CAAC,CAEtD,EAMMiK,GAAsB,CAAC/F,EAAUlE,IAAW,CAChD,IAAMkK,EAAyBvM,EAAiB,EAChD,GAAI,CAACuM,EACH,OAEF,GAAM,CACJ,cAAAC,EACA,oBAAAC,CACF,EAAIpK,EACJ,GAAI,CAACmK,GAAiBA,EAAc,SAAW,GAAKC,IAAwB,OAAW,CACrFhJ,GAAK8I,CAAsB,EAC3B,MACF,CACAhJ,GAAKgJ,CAAsB,EAC3BA,EAAuB,YAAc,GACjCE,GAAuBD,EAAc,QACvChO,EAAK,uIAA4I,EAEnJgO,EAAc,QAAQ,CAACE,EAAMC,KAAU,CACrC,IAAMC,GAASC,GAAkBH,CAAI,EAKrC,GAJAH,EAAuB,YAAYK,EAAM,EACrCD,KAAUF,GACZjK,GAASoK,GAAQ5O,EAAY,sBAAsB,CAAC,EAElD2O,KAAUH,EAAc,OAAS,EAAG,CACtC,IAAMM,GAASC,GAAkB1K,CAAM,EACvCkK,EAAuB,YAAYO,EAAM,CAC3C,CACF,CAAC,CACH,EAMMD,GAAoBH,GAAQ,CAChC,IAAME,EAAS,SAAS,cAAc,IAAI,EAC1C,OAAApK,GAASoK,EAAQ5O,EAAY,eAAe,CAAC,EAC7C2D,GAAaiL,EAAQF,CAAI,EAClBE,CACT,EAMMG,GAAoB1K,GAAU,CAClC,IAAMyK,EAAS,SAAS,cAAc,IAAI,EAC1C,OAAAtK,GAASsK,EAAQ9O,EAAY,oBAAoB,CAAC,EAC9CqE,EAAO,uBACTe,GAAoB0J,EAAQ,QAASzK,EAAO,qBAAqB,EAE5DyK,CACT,EAMME,GAAc,CAACzG,EAAUlE,IAAW,CACxC,IAAM4K,EAAQpN,EAAS,EAClBoN,IAGLvJ,GAAyBuJ,CAAK,EAC9BtJ,GAAOsJ,EAAO5K,EAAO,OAASA,EAAO,UAAW,OAAO,EACnDA,EAAO,OACT6D,EAAqB7D,EAAO,MAAO4K,CAAK,EAEtC5K,EAAO,YACT4K,EAAM,UAAY5K,EAAO,WAI3BC,GAAiB2K,EAAO5K,EAAQ,OAAO,EACzC,EAMM6K,GAAS,CAAC3G,EAAUlE,IAAW,CACnC8J,GAAY5F,EAAUlE,CAAM,EAC5BmF,GAAgBjB,EAAUlE,CAAM,EAChCiK,GAAoB/F,EAAUlE,CAAM,EACpC6H,GAAW3D,EAAUlE,CAAM,EAC3B6I,GAAY3E,EAAUlE,CAAM,EAC5B2K,GAAYzG,EAAUlE,CAAM,EAC5BiF,EAAkBf,EAAUlE,CAAM,EAClCyH,GAAcvD,EAAUlE,CAAM,EAC9BiE,EAAcC,EAAUlE,CAAM,EAC9B2H,GAAazD,EAAUlE,CAAM,EAC7B,IAAMxB,EAAQnB,EAAS,EACnB,OAAO2C,EAAO,WAAc,YAAcxB,GAC5CwB,EAAO,UAAUxB,CAAK,EAExBrD,EAAY,aAAa,KAAK,YAAaqD,CAAK,CAClD,EAKMsM,GAAY,IACT7L,GAAY5B,EAAS,CAAC,EAMzB0N,GAAe,IAAM,CACzB,IAAIC,EACJ,OAAQA,EAAwBnN,EAAiB,KAAO,MAAQmN,IAA0B,OAAS,OAASA,EAAsB,MAAM,CAC1I,EAKMC,GAAY,IAAM,CACtB,IAAIC,EACJ,OAAQA,EAAqBnN,GAAc,KAAO,MAAQmN,IAAuB,OAAS,OAASA,EAAmB,MAAM,CAC9H,EAKMC,GAAc,IAAM,CACxB,IAAIC,EACJ,OAAQA,EAAuBtN,GAAgB,KAAO,MAAQsN,IAAyB,OAAS,OAASA,EAAqB,MAAM,CACtI,EAKMC,GAAgB,OAAO,OAAO,CAClC,OAAQ,SACR,SAAU,WACV,MAAO,QACP,IAAK,MACL,MAAO,OACT,CAAC,EAKKC,GAAuBnQ,GAAe,CACtCA,EAAY,eAAiBA,EAAY,sBAC3CA,EAAY,cAAc,oBAAoB,UAAWA,EAAY,eAAgB,CACnF,QAASA,EAAY,sBACvB,CAAC,EACDA,EAAY,oBAAsB,GAEtC,EAOMoQ,GAAoB,CAACpQ,EAAa0K,EAAa2F,IAAgB,CACnEF,GAAqBnQ,CAAW,EAC3B0K,EAAY,QACf1K,EAAY,eAAiBX,GAAKiR,GAAe5F,EAAarL,EAAGgR,CAAW,EAC5ErQ,EAAY,cAAgB0K,EAAY,uBAAyB,OAASxI,EAAS,EACnFlC,EAAY,uBAAyB0K,EAAY,uBACjD1K,EAAY,cAAc,iBAAiB,UAAWA,EAAY,eAAgB,CAChF,QAASA,EAAY,sBACvB,CAAC,EACDA,EAAY,oBAAsB,GAEtC,EAMMuQ,GAAW,CAACpB,EAAOqB,IAAc,CACrC,IAAIC,EACJ,IAAMC,EAAoBtN,GAAqB,EAE/C,GAAIsN,EAAkB,OAAQ,CAC5BvB,EAAQA,EAAQqB,EAGZrB,IAAU,KACZA,EAAQuB,EAAkB,OAAS,GAIjCvB,IAAUuB,EAAkB,OAC9BvB,EAAQ,EAGCA,IAAU,KACnBA,EAAQuB,EAAkB,OAAS,GAErCA,EAAkBvB,CAAK,EAAE,MAAM,EAC/B,MACF,EAECsB,EAAgBvO,EAAS,KAAO,MAAQuO,IAAkB,QAAUA,EAAc,MAAM,CAC3F,EACME,GAAsB,CAAC,aAAc,WAAW,EAChDC,GAA0B,CAAC,YAAa,SAAS,EAOjDN,GAAiB,CAAC5F,EAAa4D,EAAO+B,IAAgB,CACrD3F,IAQD4D,EAAM,aAAeA,EAAM,UAAY,MAGvC5D,EAAY,wBACd4D,EAAM,gBAAgB,EAIpBA,EAAM,MAAQ,QAChBuC,GAAYvC,EAAO5D,CAAW,EAIvB4D,EAAM,MAAQ,MACrBwC,GAAUxC,CAAK,EAIR,CAAC,GAAGqC,GAAqB,GAAGC,EAAuB,EAAE,SAAStC,EAAM,GAAG,EAC9EyC,GAAazC,EAAM,GAAG,EAIfA,EAAM,MAAQ,UACrB0C,GAAU1C,EAAO5D,EAAa2F,CAAW,GAE7C,EAMMQ,GAAc,CAACvC,EAAO5D,IAAgB,CAE1C,GAAI,CAAClJ,EAAekJ,EAAY,aAAa,EAC3C,OAEF,IAAMtF,EAAQH,GAAW/C,EAAS,EAAGwI,EAAY,KAAK,EACtD,GAAI4D,EAAM,QAAUlJ,GAASkJ,EAAM,kBAAkB,aAAeA,EAAM,OAAO,YAAclJ,EAAM,UAAW,CAC9G,GAAI,CAAC,WAAY,MAAM,EAAE,SAASsF,EAAY,KAAK,EACjD,OAEFkF,GAAa,EACbtB,EAAM,eAAe,CACvB,CACF,EAKMwC,GAAYxC,GAAS,CACzB,IAAM/F,EAAgB+F,EAAM,OACtBoC,EAAoBtN,GAAqB,EAC3C6N,EAAW,GACf,QAAStM,EAAI,EAAGA,EAAI+L,EAAkB,OAAQ/L,IAC5C,GAAI4D,IAAkBmI,EAAkB/L,CAAC,EAAG,CAC1CsM,EAAWtM,EACX,KACF,CAIG2J,EAAM,SAMTiC,GAASU,EAAU,EAAE,EALrBV,GAASU,EAAU,CAAC,EAOtB3C,EAAM,gBAAgB,EACtBA,EAAM,eAAe,CACvB,EAKMyC,GAAeG,GAAO,CAC1B,IAAMlI,EAAUjG,GAAW,EACrBoG,EAAgBzG,EAAiB,EACjC0G,EAAaxG,GAAc,EAC3ByG,EAAe1G,GAAgB,EACrC,GAAI,CAACqG,GAAW,CAACG,GAAiB,CAACC,GAAc,CAACC,EAChD,OAGF,IAAM8H,EAAU,CAAChI,EAAeC,EAAYC,CAAY,EACxD,GAAI,SAAS,yBAAyB,aAAe,CAAC8H,EAAQ,SAAS,SAAS,aAAa,EAC3F,OAEF,IAAMC,GAAUT,GAAoB,SAASO,CAAG,EAAI,qBAAuB,yBACvEG,GAAgB,SAAS,cAC7B,GAAKA,GAGL,SAAS1M,GAAI,EAAGA,GAAIqE,EAAQ,SAAS,OAAQrE,KAAK,CAEhD,GADA0M,GAAgBA,GAAcD,EAAO,EACjC,CAACC,GACH,OAEF,GAAIA,cAAyB,mBAAqBvN,GAAYuN,EAAa,EACzE,KAEJ,CACIA,cAAyB,mBAC3BA,GAAc,MAAM,EAExB,EAOML,GAAY,CAAC1C,EAAO5D,EAAa2F,IAAgB,CACrD/B,EAAM,eAAe,EACjB9M,EAAekJ,EAAY,cAAc,GAC3C2F,EAAYH,GAAc,GAAG,CAEjC,EAYA,IAAIoB,GAAiB,CACnB,mBAAoB,IAAI,QACxB,kBAAmB,IAAI,OACzB,EAOA,IAAMC,GAAgB,IAAM,CAC1B,IAAMvP,EAAYH,EAAa,EACV,MAAM,KAAK,SAAS,KAAK,QAAQ,EACzC,QAAQgC,GAAM,CACrBA,EAAG,SAAS7B,CAAS,IAGrB6B,EAAG,aAAa,aAAa,GAC/BA,EAAG,aAAa,4BAA6BA,EAAG,aAAa,aAAa,GAAK,EAAE,EAEnFA,EAAG,aAAa,cAAe,MAAM,EACvC,CAAC,CACH,EACM2N,GAAkB,IAAM,CACP,MAAM,KAAK,SAAS,KAAK,QAAQ,EACzC,QAAQ3N,GAAM,CACrBA,EAAG,aAAa,2BAA2B,GAC7CA,EAAG,aAAa,cAAeA,EAAG,aAAa,2BAA2B,GAAK,EAAE,EACjFA,EAAG,gBAAgB,2BAA2B,GAE9CA,EAAG,gBAAgB,aAAa,CAEpC,CAAC,CACH,EAGM4N,GAAgB,OAAO,OAAW,KAAe,CAAC,CAAC,OAAO,aAM1DC,GAAS,IAAM,CACnB,GAAID,IAAiB,CAACzN,GAAS,SAAS,KAAMxD,EAAY,MAAM,EAAG,CACjE,IAAMmR,EAAS,SAAS,KAAK,UAC7B,SAAS,KAAK,MAAM,IAAM,GAAGA,EAAS,EAAE,KACxC3M,GAAS,SAAS,KAAMxE,EAAY,MAAM,EAC1CoR,GAAe,CACjB,CACF,EAKMA,GAAiB,IAAM,CAC3B,IAAM5P,EAAYH,EAAa,EAC/B,GAAI,CAACG,EACH,OAGF,IAAI6P,EAIJ7P,EAAU,aAAesM,GAAS,CAChCuD,EAAmBC,GAAuBxD,CAAK,CACjD,EAIAtM,EAAU,YAAcsM,GAAS,CAC3BuD,IACFvD,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EAE1B,CACF,EAMMwD,GAAyBxD,GAAS,CACtC,IAAM/I,EAAS+I,EAAM,OACftM,EAAYH,EAAa,EACzB0K,EAAgBjK,EAAiB,EAIvC,MAHI,CAACN,GAAa,CAACuK,GAGfwF,GAASzD,CAAK,GAAK0D,GAAO1D,CAAK,EAC1B,GAEL/I,IAAWvD,GAGX,CAACwE,GAAaxE,CAAS,GAAKuD,aAAkB,aAAe,CAACkB,GAAyBlB,EAAQgH,CAAa,GAEhHhH,EAAO,UAAY,SAEnBA,EAAO,UAAY,YAEnB,EAAEiB,GAAa+F,CAAa,GAE5BA,EAAc,SAAShH,CAAM,EAI/B,EAQMwM,GAAWzD,GACRA,EAAM,SAAWA,EAAM,QAAQ,QAAUA,EAAM,QAAQ,CAAC,EAAE,YAAc,SAS3E0D,GAAS1D,GACNA,EAAM,SAAWA,EAAM,QAAQ,OAAS,EAE3C2D,GAAa,IAAM,CACvB,GAAIjO,GAAS,SAAS,KAAMxD,EAAY,MAAM,EAAG,CAC/C,IAAMmR,EAAS,SAAS,SAAS,KAAK,MAAM,IAAK,EAAE,EACnDlM,GAAY,SAAS,KAAMjF,EAAY,MAAM,EAC7C,SAAS,KAAK,MAAM,IAAM,GAC1B,SAAS,KAAK,UAAYmR,EAAS,EACrC,CACF,EAQMO,GAAmB,IAAM,CAC7B,IAAMC,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAY3R,EAAY,mBAAmB,EACrD,SAAS,KAAK,YAAY2R,CAAS,EACnC,IAAMC,EAAiBD,EAAU,sBAAsB,EAAE,MAAQA,EAAU,YAC3E,gBAAS,KAAK,YAAYA,CAAS,EAC5BC,CACT,EAMIC,GAAsB,KAKpBC,GAA8BC,GAAuB,CAErDF,KAAwB,OAIxB,SAAS,KAAK,aAAe,OAAO,aAAeE,IAAwB,YAG7EF,GAAsB,SAAS,OAAO,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,eAAe,CAAC,EACvG,SAAS,KAAK,MAAM,aAAe,GAAGA,GAAsBH,GAAiB,CAAC,KAElF,EACMM,GAAkC,IAAM,CACxCH,KAAwB,OAC1B,SAAS,KAAK,MAAM,aAAe,GAAGA,EAAmB,KACzDA,GAAsB,KAE1B,EAQA,SAASI,GAAyB1J,EAAU/G,EAAW7B,EAAauS,EAAU,CACxEzO,GAAQ,EACV0O,GAA0B5J,EAAU2J,CAAQ,GAE5CxS,EAAqBC,CAAW,EAAE,KAAK,IAAMwS,GAA0B5J,EAAU2J,CAAQ,CAAC,EAC1FvC,GAAqBnQ,CAAW,GAK9ByR,IACFzP,EAAU,aAAa,QAAS,yBAAyB,EACzDA,EAAU,gBAAgB,OAAO,EACjCA,EAAU,UAAY,IAEtBA,EAAU,OAAO,EAEf+B,GAAQ,IACVyO,GAAgC,EAChCP,GAAW,EACXT,GAAgB,GAElBoB,GAAkB,CACpB,CAKA,SAASA,IAAoB,CAC3BnN,GAAY,CAAC,SAAS,gBAAiB,SAAS,IAAI,EAAG,CAACjF,EAAY,MAAOA,EAAY,aAAa,EAAGA,EAAY,aAAa,EAAGA,EAAY,aAAa,CAAC,CAAC,CAChK,CAOA,SAASqS,GAAMC,EAAc,CAC3BA,EAAeC,GAAoBD,CAAY,EAC/C,IAAME,EAAqB1B,GAAe,mBAAmB,IAAI,IAAI,EAC/DoB,EAAWO,GAAkB,IAAI,EACnC,KAAK,kBAEFH,EAAa,cAChBI,GAAsB,IAAI,EAC1BF,EAAmBF,CAAY,GAExBJ,GAETM,EAAmBF,CAAY,CAEnC,CACA,IAAMG,GAAoBlK,GAAY,CACpC,IAAM1F,EAAQnB,EAAS,EACvB,GAAI,CAACmB,EACH,MAAO,GAET,IAAMqH,EAAcH,GAAa,YAAY,IAAIxB,CAAQ,EACzD,GAAI,CAAC2B,GAAe1G,GAASX,EAAOqH,EAAY,UAAU,KAAK,EAC7D,MAAO,GAETjF,GAAYpC,EAAOqH,EAAY,UAAU,KAAK,EAC9C1F,GAAS3B,EAAOqH,EAAY,UAAU,KAAK,EAC3C,IAAMN,EAAWvI,EAAa,EAC9B,OAAA4D,GAAY2E,EAAUM,EAAY,UAAU,QAAQ,EACpD1F,GAASoF,EAAUM,EAAY,UAAU,QAAQ,EACjDyI,GAAqBpK,EAAU1F,EAAOqH,CAAW,EAC1C,EACT,EAKA,SAAS0I,GAAclS,EAAO,CAC5B,IAAMkS,EAAgB9B,GAAe,kBAAkB,IAAI,IAAI,EAC/D4B,GAAsB,IAAI,EACtBE,GAEFA,EAAclS,CAAK,CAEvB,CAKA,IAAMgS,GAAwBnK,GAAY,CACpCA,EAAS,oBACX,OAAOA,EAAS,kBAEXwB,GAAa,YAAY,IAAIxB,CAAQ,GACxCA,EAAS,SAAS,EAGxB,EAMMgK,GAAsBD,GAEtB,OAAOA,EAAiB,IACnB,CACL,YAAa,GACb,SAAU,GACV,YAAa,EACf,EAEK,OAAO,OAAO,CACnB,YAAa,GACb,SAAU,GACV,YAAa,EACf,EAAGA,CAAY,EAQXK,GAAuB,CAACpK,EAAU1F,EAAOqH,IAAgB,CAC7D,IAAI2I,EACJ,IAAMrR,EAAYH,EAAa,EAEzByR,EAAuB1M,GAAgBvD,CAAK,EAC9C,OAAOqH,EAAY,WAAc,YACnCA,EAAY,UAAUrH,CAAK,GAE5BgQ,EAAwBrT,EAAY,gBAAkB,MAAQqT,IAA0B,QAAUA,EAAsB,KAAK,YAAahQ,CAAK,EAC5IiQ,EACFC,GAAaxK,EAAU1F,EAAOrB,EAAW0I,EAAY,YAAaA,EAAY,QAAQ,EAGtF+H,GAAyB1J,EAAU/G,EAAW0I,EAAY,YAAaA,EAAY,QAAQ,CAE/F,EASM6I,GAAe,CAACxK,EAAU1F,EAAOrB,EAAW7B,EAAauS,IAAa,CAC1E1S,EAAY,+BAAiCyS,GAAyB,KAAK,KAAM1J,EAAU/G,EAAW7B,EAAauS,CAAQ,EAI3H,IAAMc,EAA6B,SAAUnU,GAAG,CAC9C,GAAIA,GAAE,SAAWgE,EAAO,CACtB,IAAIoQ,IACHA,GAAwBzT,EAAY,kCAAoC,MAAQyT,KAA0B,QAAUA,GAAsB,KAAKzT,CAAW,EAC3J,OAAOA,EAAY,+BACnBqD,EAAM,oBAAoB,eAAgBmQ,CAA0B,EACpEnQ,EAAM,oBAAoB,gBAAiBmQ,CAA0B,CACvE,CACF,EACAnQ,EAAM,iBAAiB,eAAgBmQ,CAA0B,EACjEnQ,EAAM,iBAAiB,gBAAiBmQ,CAA0B,CACpE,EAMMb,GAA4B,CAAC5J,EAAU2J,IAAa,CACxD,WAAW,IAAM,CACf,IAAIgB,EACA,OAAOhB,GAAa,YACtBA,EAAS,KAAK3J,EAAS,MAAM,EAAE,GAEhC2K,EAAyB1T,EAAY,gBAAkB,MAAQ0T,IAA2B,QAAUA,EAAuB,KAAK,UAAU,EAEvI3K,EAAS,UACXA,EAAS,SAAS,CAEtB,CAAC,CACH,EAQM4K,GAAcC,GAAmB,CACrC,IAAIvQ,EAAQnB,EAAS,EAKrB,GAJKmB,GACH,IAAIwQ,GAENxQ,EAAQnB,EAAS,EACb,CAACmB,EACH,OAEF,IAAM4F,EAASnG,GAAU,EACrBmB,GAAQ,EACVgC,GAAK9D,GAAQ,CAAC,EAEd2R,GAAczQ,EAAOuQ,CAAe,EAEtC7N,GAAKkD,CAAM,EACX5F,EAAM,aAAa,eAAgB,MAAM,EACzCA,EAAM,aAAa,YAAa,MAAM,EACtCA,EAAM,MAAM,CACd,EAMMyQ,GAAgB,CAACzQ,EAAOuQ,IAAoB,CAChD,IAAM5K,EAAUjG,GAAW,EACrBkG,EAASnG,GAAU,EACrB,CAACkG,GAAW,CAACC,IAGb,CAAC2K,GAAmB9P,GAAYpB,EAAiB,CAAC,IACpDkR,EAAkBlR,EAAiB,GAErCqD,GAAKiD,CAAO,EACR4K,IACF3N,GAAK2N,CAAe,EACpB3K,EAAO,aAAa,yBAA0B2K,EAAgB,SAAS,EACvE5K,EAAQ,aAAaC,EAAQ2K,CAAe,GAE9C5O,GAAS,CAAC3B,EAAO2F,CAAO,EAAGxI,EAAY,OAAO,EAChD,EAMMuT,GAA6B,CAAChL,EAAUlE,IAAW,CACnDA,EAAO,QAAU,UAAYA,EAAO,QAAU,QAChDmP,GAAmBjL,EAAUlE,CAAM,EAC1B,CAAC,OAAQ,QAAS,SAAU,MAAO,UAAU,EAAE,KAAKF,GAAKA,IAAME,EAAO,KAAK,IAAMnD,EAAemD,EAAO,UAAU,GAAKjD,EAAUiD,EAAO,UAAU,KAC1J8O,GAAYjR,EAAiB,CAAC,EAC9BuR,GAAiBlL,EAAUlE,CAAM,EAErC,EAOMqP,GAAgB,CAACnL,EAAU2B,IAAgB,CAC/C,IAAMtF,EAAQ2D,EAAS,SAAS,EAChC,GAAI,CAAC3D,EACH,OAAO,KAET,OAAQsF,EAAY,MAAO,CACzB,IAAK,WACH,OAAOyJ,GAAiB/O,CAAK,EAC/B,IAAK,QACH,OAAOgP,GAAchP,CAAK,EAC5B,IAAK,OACH,OAAOiP,GAAajP,CAAK,EAC3B,QACE,OAAOsF,EAAY,cAAgBtF,EAAM,MAAM,KAAK,EAAIA,EAAM,KAClE,CACF,EAMM+O,GAAmB/O,GAASA,EAAM,QAAU,EAAI,EAMhDgP,GAAgBhP,GAASA,EAAM,QAAUA,EAAM,MAAQ,KAMvDiP,GAAejP,GAASA,EAAM,OAASA,EAAM,MAAM,OAASA,EAAM,aAAa,UAAU,IAAM,KAAOA,EAAM,MAAQA,EAAM,MAAM,CAAC,EAAI,KAMrI4O,GAAqB,CAACjL,EAAUlE,IAAW,CAC/C,IAAMxB,EAAQnB,EAAS,EACvB,GAAI,CAACmB,EACH,OAKF,IAAMiR,EAAsBC,GAAgB,CACtC1P,EAAO,QAAU,SACnB2P,GAAsBnR,EAAOoR,GAAmBF,CAAY,EAAG1P,CAAM,EAC5DA,EAAO,QAAU,SAC1B6P,GAAqBrR,EAAOoR,GAAmBF,CAAY,EAAG1P,CAAM,CAExE,EACInD,EAAemD,EAAO,YAAY,GAAKjD,EAAUiD,EAAO,YAAY,GACtE8O,GAAYjR,EAAiB,CAAC,EAC9Bf,EAAUkD,EAAO,YAAY,EAAE,KAAK0P,GAAgB,CAClDxL,EAAS,YAAY,EACrBuL,EAAoBC,CAAY,CAClC,CAAC,GACQ,OAAO1P,EAAO,cAAiB,SACxCyP,EAAoBzP,EAAO,YAAY,EAEvC3D,EAAM,yEAAyE,OAAO2D,EAAO,YAAY,EAAE,CAE/G,EAMMoP,GAAmB,CAAClL,EAAUlE,IAAW,CAC7C,IAAMO,EAAQ2D,EAAS,SAAS,EAC3B3D,IAGLa,GAAKb,CAAK,EACVzD,EAAUkD,EAAO,UAAU,EAAE,KAAKgH,GAAc,CAC9CzG,EAAM,MAAQP,EAAO,QAAU,SAAW,GAAG,WAAWgH,CAAU,GAAK,CAAC,GAAK,GAAGA,CAAU,GAC1F9F,GAAKX,CAAK,EACVA,EAAM,MAAM,EACZ2D,EAAS,YAAY,CACvB,CAAC,EAAE,MAAM4L,GAAO,CACdzT,EAAM,gCAAgCyT,CAAG,EAAE,EAC3CvP,EAAM,MAAQ,GACdW,GAAKX,CAAK,EACVA,EAAM,MAAM,EACZ2D,EAAS,YAAY,CACvB,CAAC,EACH,EAOA,SAASyL,GAAsBnR,EAAOkR,EAAc1P,EAAQ,CAC1D,IAAMoD,EAASvC,GAAsBrC,EAAO7C,EAAY,MAAM,EAC9D,GAAI,CAACyH,EACH,OAOF,IAAM2M,EAAe,CAACvO,EAAQwO,GAAaC,KAAgB,CACzD,IAAMC,GAAS,SAAS,cAAc,QAAQ,EAC9CA,GAAO,MAAQD,GACf3Q,GAAa4Q,GAAQF,EAAW,EAChCE,GAAO,SAAWC,GAAWF,GAAajQ,EAAO,UAAU,EAC3DwB,EAAO,YAAY0O,EAAM,CAC3B,EACAR,EAAa,QAAQU,GAAe,CAClC,IAAMH,GAAcG,EAAY,CAAC,EAC3BJ,GAAcI,EAAY,CAAC,EAKjC,GAAI,MAAM,QAAQJ,EAAW,EAAG,CAE9B,IAAMK,GAAW,SAAS,cAAc,UAAU,EAClDA,GAAS,MAAQJ,GACjBI,GAAS,SAAW,GACpBjN,EAAO,YAAYiN,EAAQ,EAC3BL,GAAY,QAAQM,IAAKP,EAAaM,GAAUC,GAAE,CAAC,EAAGA,GAAE,CAAC,CAAC,CAAC,CAC7D,MAEEP,EAAa3M,EAAQ4M,GAAaC,EAAW,CAEjD,CAAC,EACD7M,EAAO,MAAM,CACf,CAOA,SAASyM,GAAqBrR,EAAOkR,EAAc1P,EAAQ,CACzD,IAAMmH,EAAQtG,GAAsBrC,EAAO7C,EAAY,KAAK,EAC5D,GAAI,CAACwL,EACH,OAEFuI,EAAa,QAAQU,GAAe,CAClC,IAAMG,GAAaH,EAAY,CAAC,EAC1BI,GAAaJ,EAAY,CAAC,EAC1BK,GAAa,SAAS,cAAc,OAAO,EAC3CC,GAAoB,SAAS,cAAc,OAAO,EACxDD,GAAW,KAAO,QAClBA,GAAW,KAAO9U,EAAY,MAC9B8U,GAAW,MAAQF,GACfJ,GAAWI,GAAYvQ,EAAO,UAAU,IAC1CyQ,GAAW,QAAU,IAEvB,IAAM7J,GAAQ,SAAS,cAAc,MAAM,EAC3CtH,GAAasH,GAAO4J,EAAU,EAC9B5J,GAAM,UAAYjL,EAAY,MAC9B+U,GAAkB,YAAYD,EAAU,EACxCC,GAAkB,YAAY9J,EAAK,EACnCO,EAAM,YAAYuJ,EAAiB,CACrC,CAAC,EACD,IAAMC,EAASxJ,EAAM,iBAAiB,OAAO,EACzCwJ,EAAO,QACTA,EAAO,CAAC,EAAE,MAAM,CAEpB,CASA,IAAMf,GAAqBF,GAAgB,CAEzC,IAAMkB,EAAS,CAAC,EAChB,OAAIlB,aAAwB,IAC1BA,EAAa,QAAQ,CAACzO,EAAOoL,IAAQ,CACnC,IAAIwE,EAAiB5P,EACjB,OAAO4P,GAAmB,WAE5BA,EAAiBjB,GAAmBiB,CAAc,GAEpDD,EAAO,KAAK,CAACvE,EAAKwE,CAAc,CAAC,CACnC,CAAC,EAED,OAAO,KAAKnB,CAAY,EAAE,QAAQrD,GAAO,CACvC,IAAIwE,EAAiBnB,EAAarD,CAAG,EACjC,OAAOwE,GAAmB,WAE5BA,EAAiBjB,GAAmBiB,CAAc,GAEpDD,EAAO,KAAK,CAACvE,EAAKwE,CAAc,CAAC,CACnC,CAAC,EAEID,CACT,EAOMT,GAAa,CAACF,EAAajJ,IACxB,CAAC,CAACA,GAAcA,EAAW,SAAS,IAAMiJ,EAAY,SAAS,EAMlEa,GAA2B5M,GAAY,CAC3C,IAAM2B,EAAcH,GAAa,YAAY,IAAIxB,CAAQ,EACzDA,EAAS,eAAe,EACpB2B,EAAY,MACdkL,GAA6B7M,EAAU,SAAS,EAEhD8M,GAAQ9M,EAAU,EAAI,CAE1B,EAKM+M,GAAwB/M,GAAY,CACxC,IAAM2B,EAAcH,GAAa,YAAY,IAAIxB,CAAQ,EACzDA,EAAS,eAAe,EACpB2B,EAAY,uBACdkL,GAA6B7M,EAAU,MAAM,EAE7CgN,GAAKhN,EAAU,EAAK,CAExB,EAMMiN,GAA0B,CAACjN,EAAUsH,IAAgB,CACzDtH,EAAS,eAAe,EACxBsH,EAAYH,GAAc,MAAM,CAClC,EAMM0F,GAA+B,CAAC7M,EAAUkN,IAAS,CACvD,IAAMvL,EAAcH,GAAa,YAAY,IAAIxB,CAAQ,EACzD,GAAI,CAAC2B,EAAY,MAAO,CACtBxJ,EAAM,0EAA0EJ,EAAsBmV,CAAI,CAAC,EAAE,EAC7G,MACF,CACA,IAAM7Q,EAAQ2D,EAAS,SAAS,EAC1B8C,EAAaqI,GAAcnL,EAAU2B,CAAW,EAClDA,EAAY,eACdwL,GAAqBnN,EAAU8C,EAAYoK,CAAI,EACtC7Q,GAAS,CAACA,EAAM,cAAc,GACvC2D,EAAS,cAAc,EACvBA,EAAS,sBAAsB2B,EAAY,mBAAqBtF,EAAM,iBAAiB,GAC9E6Q,IAAS,OAClBF,GAAKhN,EAAU8C,CAAU,EAEzBgK,GAAQ9M,EAAU8C,CAAU,CAEhC,EAOMqK,GAAuB,CAACnN,EAAU8C,EAAYoK,IAAS,CAC3D,IAAMvL,EAAcH,GAAa,YAAY,IAAIxB,CAAQ,EACzDA,EAAS,aAAa,EACI,QAAQ,QAAQ,EAAE,KAAK,IAAMpH,EAAU+I,EAAY,eAAemB,EAAYnB,EAAY,iBAAiB,CAAC,CAAC,EACrH,KAAKyL,GAAqB,CAC1CpN,EAAS,cAAc,EACvBA,EAAS,YAAY,EACjBoN,EACFpN,EAAS,sBAAsBoN,CAAiB,EACvCF,IAAS,OAClBF,GAAKhN,EAAU8C,CAAU,EAEzBgK,GAAQ9M,EAAU8C,CAAU,CAEhC,CAAC,CACH,EAMMkK,GAAO,CAAChN,EAAUjD,IAAU,CAChC,IAAM4E,EAAcH,GAAa,YAAY,IAAIxB,GAAY,MAAS,EAClE2B,EAAY,kBACdiJ,GAAY/Q,GAAc,CAAC,EAEzB8H,EAAY,SACd3B,EAAS,kBAAoB,GACN,QAAQ,QAAQ,EAAE,KAAK,IAAMpH,EAAU+I,EAAY,QAAQ5E,EAAO4E,EAAY,iBAAiB,CAAC,CAAC,EACzG,KAAK0L,GAAgB,CAC9BA,IAAiB,IACnBrN,EAAS,YAAY,EACrBmK,GAAsBnK,CAAQ,GAE9BA,EAAS,MAAM,CACb,SAAU,GACV,MAAO,OAAOqN,EAAiB,IAActQ,EAAQsQ,CACvD,CAAC,CAEL,CAAC,EAAE,MAAMlV,GAASmV,GAAWtN,GAAY,OAAW7H,CAAK,CAAC,GAE1D6H,EAAS,MAAM,CACb,SAAU,GACV,MAAAjD,CACF,CAAC,CAEL,EAMMwQ,GAAc,CAACvN,EAAUjD,IAAU,CACvCiD,EAAS,MAAM,CACb,YAAa,GACb,MAAAjD,CACF,CAAC,CACH,EAOMuQ,GAAa,CAACtN,EAAU7H,IAAU,CACtC6H,EAAS,cAAc7H,CAAK,CAC9B,EAOM2U,GAAU,CAAC9M,EAAUjD,IAAU,CACnC,IAAM4E,EAAcH,GAAa,YAAY,IAAIxB,GAAY,MAAS,EAClE2B,EAAY,qBACdiJ,GAAY,EAEVjJ,EAAY,YACd3B,EAAS,uBAAuB,EAChCA,EAAS,kBAAoB,GACH,QAAQ,QAAQ,EAAE,KAAK,IAAMpH,EAAU+I,EAAY,WAAW5E,EAAO4E,EAAY,iBAAiB,CAAC,CAAC,EAC5G,KAAK6L,GAAmB,CACpCzS,GAAYrB,EAAqB,CAAC,GAAK8T,IAAoB,IAC7DxN,EAAS,YAAY,EACrBmK,GAAsBnK,CAAQ,GAE9BuN,GAAYvN,EAAU,OAAOwN,EAAoB,IAAczQ,EAAQyQ,CAAe,CAE1F,CAAC,EAAE,MAAMrV,GAASmV,GAAWtN,GAAY,OAAW7H,CAAK,CAAC,GAE1DoV,GAAYvN,EAAUjD,CAAK,CAE/B,EAKA,SAAS0Q,IAAc,CAErB,IAAM9L,EAAcH,GAAa,YAAY,IAAI,IAAI,EACrD,GAAI,CAACG,EACH,OAEF,IAAM+L,EAAWlM,GAAa,SAAS,IAAI,IAAI,EAC/CtE,GAAKwQ,EAAS,MAAM,EAChBxS,GAAQ,EACNyG,EAAY,MACd3E,GAAK5D,GAAQ,CAAC,EAGhBuU,GAAkBD,CAAQ,EAE5BhR,GAAY,CAACgR,EAAS,MAAOA,EAAS,OAAO,EAAGjW,EAAY,OAAO,EACnEiW,EAAS,MAAM,gBAAgB,WAAW,EAC1CA,EAAS,MAAM,gBAAgB,cAAc,EAC7CA,EAAS,cAAc,SAAW,GAClCA,EAAS,WAAW,SAAW,GAC/BA,EAAS,aAAa,SAAW,EACnC,CACA,IAAMC,GAAoBD,GAAY,CACpC,IAAM7C,EAAkB6C,EAAS,MAAM,uBAAuBA,EAAS,OAAO,aAAa,wBAAwB,CAAC,EAChH7C,EAAgB,OAClB7N,GAAK6N,EAAgB,CAAC,EAAG,cAAc,EAC9BrN,GAAoB,GAC7BN,GAAKwQ,EAAS,OAAO,CAEzB,EAOA,SAASE,IAAW,CAClB,IAAMjM,EAAcH,GAAa,YAAY,IAAI,IAAI,EAC/CkM,EAAWlM,GAAa,SAAS,IAAI,IAAI,EAC/C,OAAKkM,EAGExR,GAAWwR,EAAS,MAAO/L,EAAY,KAAK,EAF1C,IAGX,CAOA,SAASkM,GAAmB7N,EAAUoI,EAAS0F,EAAU,CACvD,IAAMJ,EAAWlM,GAAa,SAAS,IAAIxB,CAAQ,EACnDoI,EAAQ,QAAQ1H,GAAU,CACxBgN,EAAShN,CAAM,EAAE,SAAWoN,CAC9B,CAAC,CACH,CAMA,SAASC,GAAiB1R,EAAOyR,EAAU,CACzC,IAAMxT,EAAQnB,EAAS,EACvB,GAAI,GAACmB,GAAS,CAAC+B,GAGf,GAAIA,EAAM,OAAS,QAAS,CAE1B,IAAMoQ,EAASnS,EAAM,iBAAiB,UAAU7C,EAAY,KAAK,IAAI,EACrE,QAASmE,EAAI,EAAGA,EAAI6Q,EAAO,OAAQ7Q,IACjC6Q,EAAO7Q,CAAC,EAAE,SAAWkS,CAEzB,MACEzR,EAAM,SAAWyR,CAErB,CAMA,SAASE,IAAgB,CACvBH,GAAmB,KAAM,CAAC,gBAAiB,aAAc,cAAc,EAAG,EAAK,CACjF,CAMA,SAASI,IAAiB,CACxBJ,GAAmB,KAAM,CAAC,gBAAiB,aAAc,cAAc,EAAG,EAAI,CAChF,CAMA,SAASK,IAAc,CACrBH,GAAiB,KAAK,SAAS,EAAG,EAAK,CACzC,CAMA,SAASI,IAAe,CACtBJ,GAAiB,KAAK,SAAS,EAAG,EAAI,CACxC,CAQA,SAASK,GAAsBjW,EAAO,CACpC,IAAMuV,EAAWlM,GAAa,SAAS,IAAI,IAAI,EACzC1F,EAAS0F,GAAa,YAAY,IAAI,IAAI,EAChDpG,GAAasS,EAAS,kBAAmBvV,CAAK,EAC9CuV,EAAS,kBAAkB,UAAYjW,EAAY,oBAAoB,EACnEqE,EAAO,aAAeA,EAAO,YAAY,mBAC3CG,GAASyR,EAAS,kBAAmB5R,EAAO,YAAY,iBAAiB,EAE3EkB,GAAK0Q,EAAS,iBAAiB,EAC/B,IAAMrR,EAAQ,KAAK,SAAS,EACxBA,IACFA,EAAM,aAAa,eAAgB,MAAM,EACzCA,EAAM,aAAa,mBAAoB5E,EAAY,oBAAoB,CAAC,EACxE2E,GAAWC,CAAK,EAChBJ,GAASI,EAAO5E,EAAY,UAAU,EAE1C,CAOA,SAAS4W,IAAyB,CAChC,IAAMX,EAAWlM,GAAa,SAAS,IAAI,IAAI,EAC3CkM,EAAS,mBACXxQ,GAAKwQ,EAAS,iBAAiB,EAEjC,IAAMrR,EAAQ,KAAK,SAAS,EACxBA,IACFA,EAAM,gBAAgB,cAAc,EACpCA,EAAM,gBAAgB,kBAAkB,EACxCK,GAAYL,EAAO5E,EAAY,UAAU,EAE7C,CAEA,IAAM6W,GAAgB,CACpB,MAAO,GACP,UAAW,GACX,KAAM,GACN,KAAM,GACN,OAAQ,GACR,KAAM,OACN,UAAW,OACX,SAAU,OACV,SAAU,OACV,MAAO,GACP,UAAW,GACX,UAAW,GACX,MAAO,QACP,UAAW,CACT,MAAO,aACP,SAAU,sBACV,KAAM,iBACR,EACA,UAAW,CACT,MAAO,aACP,SAAU,sBACV,KAAM,iBACR,EACA,YAAa,CAAC,EACd,OAAQ,OACR,MAAO,OACP,SAAU,GACV,WAAY,GACZ,kBAAmB,GACnB,eAAgB,GAChB,cAAe,GACf,uBAAwB,GACxB,uBAAwB,GACxB,kBAAmB,GACnB,eAAgB,GAChB,iBAAkB,GAClB,WAAY,OACZ,QAAS,OACT,kBAAmB,KACnB,uBAAwB,GACxB,mBAAoB,OACpB,eAAgB,KAChB,oBAAqB,GACrB,gBAAiB,OACjB,iBAAkB,SAClB,sBAAuB,GACvB,kBAAmB,OACnB,eAAgB,GAChB,eAAgB,GAChB,aAAc,GACd,UAAW,GACX,YAAa,GACb,YAAa,GACb,gBAAiB,GACjB,gBAAiB,UACjB,qBAAsB,oBACtB,WAAY,GACZ,oBAAqB,GACrB,iBAAkB,GAClB,SAAU,OACV,WAAY,OACZ,YAAa,OACb,SAAU,GACV,MAAO,OACP,iBAAkB,GAClB,MAAO,OACP,QAAS,OACT,WAAY,OACZ,MAAO,OACP,iBAAkB,GAClB,WAAY,GACZ,WAAY,GACZ,aAAc,CAAC,EACf,eAAgB,GAChB,cAAe,GACf,gBAAiB,CAAC,EAClB,eAAgB,OAChB,uBAAwB,GACxB,kBAAmB,OACnB,KAAM,GACN,SAAU,SACV,cAAe,CAAC,EAChB,oBAAqB,OACrB,sBAAuB,OACvB,SAAU,OACV,QAAS,OACT,UAAW,OACX,UAAW,OACX,SAAU,OACV,WAAY,OACZ,iBAAkB,GAClB,SAAU,EACZ,EACMC,GAAkB,CAAC,iBAAkB,oBAAqB,aAAc,iBAAkB,wBAAyB,oBAAqB,mBAAoB,uBAAwB,kBAAmB,QAAS,yBAA0B,qBAAsB,oBAAqB,sBAAuB,cAAe,sBAAuB,kBAAmB,iBAAkB,WAAY,aAAc,YAAa,SAAU,YAAa,OAAQ,OAAQ,YAAa,WAAY,WAAY,cAAe,WAAY,aAAc,aAAc,UAAW,gBAAiB,cAAe,iBAAkB,mBAAoB,kBAAmB,oBAAqB,iBAAkB,OAAQ,QAAS,YAAa,QAAS,WAAW,EAG9tBC,GAAmB,CACvB,cAAe,MACjB,EACMC,GAA0B,CAAC,oBAAqB,gBAAiB,WAAY,YAAa,eAAgB,YAAa,cAAe,cAAe,aAAc,wBAAwB,EAQ3LC,GAAmBC,GAChB,OAAO,UAAU,eAAe,KAAKL,GAAeK,CAAS,EAShEC,GAAuBD,GACpBJ,GAAgB,QAAQI,CAAS,IAAM,GAS1CE,GAAwBF,GACrBH,GAAiBG,CAAS,EAM7BG,GAAsBlP,GAAS,CAC9B8O,GAAiB9O,CAAK,GACzB3H,EAAK,sBAAsB2H,CAAK,GAAG,CAEvC,EAKMmP,GAA2BnP,GAAS,CACpC6O,GAAwB,SAAS7O,CAAK,GACxC3H,EAAK,kBAAkB2H,CAAK,+BAA+B,CAE/D,EAKMoP,GAA2BpP,GAAS,CACxC,IAAMqP,EAAeJ,GAAsBjP,CAAK,EAC5CqP,GACF3W,EAAqBsH,EAAOqP,CAAY,CAE5C,EAOMC,GAAwBpT,GAAU,CAClCA,EAAO,WAAa,IAASA,EAAO,mBACtC7D,EAAK,iFAAiF,EAEpF6D,EAAO,OAAS,CAAC,CAAC,QAAS,OAAQ,OAAQ,UAAW,aAAc,eAAgB,QAAS,cAAe,YAAY,EAAE,SAASA,EAAO,KAAK,GACjJ7D,EAAK,kBAAkB6D,EAAO,KAAK,GAAG,EAExC,QAAW8D,KAAS9D,EAClBgT,GAAoBlP,CAAK,EACrB9D,EAAO,OACTiT,GAAyBnP,CAAK,EAEhCoP,GAAyBpP,CAAK,CAElC,EAOA,SAASuP,GAAOrT,EAAQ,CACtB,IAAM7C,EAAYH,EAAa,EACzBwB,EAAQnB,EAAS,EACjBwI,EAAcH,GAAa,YAAY,IAAI,IAAI,EACrD,GAAI,CAAClH,GAASW,GAASX,EAAOqH,EAAY,UAAU,KAAK,EAAG,CAC1D1J,EAAK,4IAA4I,EACjJ,MACF,CACA,IAAMmX,EAAuBC,GAAkBvT,CAAM,EAC/CwT,EAAgB,OAAO,OAAO,CAAC,EAAG3N,EAAayN,CAAoB,EACzEF,GAAsBI,CAAa,EACnCrW,EAAU,QAAQ,WAAgBqW,EAAc,MAChD3I,GAAO,KAAM2I,CAAa,EAC1B9N,GAAa,YAAY,IAAI,KAAM8N,CAAa,EAChD,OAAO,iBAAiB,KAAM,CAC5B,OAAQ,CACN,MAAO,OAAO,OAAO,CAAC,EAAG,KAAK,OAAQxT,CAAM,EAC5C,SAAU,GACV,WAAY,EACd,CACF,CAAC,CACH,CAMA,IAAMuT,GAAoBvT,GAAU,CAClC,IAAMsT,EAAuB,CAAC,EAC9B,cAAO,KAAKtT,CAAM,EAAE,QAAQ8D,GAAS,CAC/BgP,GAAqBhP,CAAK,EAC5BwP,EAAqBxP,CAAK,EAAI9D,EAAO8D,CAAK,EAE1C3H,EAAK,gCAAgC2H,CAAK,EAAE,CAEhD,CAAC,EACMwP,CACT,EAKA,SAASG,IAAW,CAClB,IAAM7B,EAAWlM,GAAa,SAAS,IAAI,IAAI,EACzCG,EAAcH,GAAa,YAAY,IAAI,IAAI,EACrD,GAAI,CAACG,EAAa,CAChB6N,GAAgB,IAAI,EACpB,MACF,CAGI9B,EAAS,OAASzW,EAAY,iCAChCA,EAAY,+BAA+B,EAC3C,OAAOA,EAAY,gCAEjB,OAAO0K,EAAY,YAAe,YACpCA,EAAY,WAAW,EAEzB1K,EAAY,aAAa,KAAK,YAAY,EAC1CwY,GAAY,IAAI,CAClB,CAKA,IAAMA,GAAczP,GAAY,CAC9BwP,GAAgBxP,CAAQ,EAExB,OAAOA,EAAS,OAEhB,OAAO/I,EAAY,eACnB,OAAOA,EAAY,cAEnB,OAAOA,EAAY,eACrB,EAKMuY,GAAkBxP,GAAY,CAE9BA,EAAS,mBACX0P,GAAclO,GAAcxB,CAAQ,EACpCA,EAAS,kBAAoB,KAE7B0P,GAAcnH,GAAgBvI,CAAQ,EACtC0P,GAAclO,GAAcxB,CAAQ,EACpC,OAAOA,EAAS,kBAEhB,OAAOA,EAAS,eAChB,OAAOA,EAAS,cAChB,OAAOA,EAAS,SAChB,OAAOA,EAAS,aAChB,OAAOA,EAAS,YAChB,OAAOA,EAAS,YAChB,OAAOA,EAAS,eAChB,OAAOA,EAAS,sBAChB,OAAOA,EAAS,uBAChB,OAAOA,EAAS,MAChB,OAAOA,EAAS,WAChB,OAAOA,EAAS,WAChB,OAAOA,EAAS,WAChB,OAAOA,EAAS,cAChB,OAAOA,EAAS,OAChB,OAAOA,EAAS,SAEpB,EAMM0P,GAAgB,CAACC,EAAK3P,IAAa,CACvC,QAAWpE,KAAK+T,EACdA,EAAI/T,CAAC,EAAE,OAAOoE,CAAQ,CAE1B,EAEA,IAAI4P,GAA+B,OAAO,OAAO,CAC/C,UAAW,KACX,SAAUL,GACV,MAAOzF,GACP,WAAYA,GACZ,WAAYA,GACZ,WAAYA,GACZ,eAAgBmE,GAChB,aAAcE,GACd,eAAgBV,GAChB,cAAeO,GACf,YAAaE,GACb,SAAUN,GACV,sBAAuBzD,GACvB,YAAasD,GACb,cAAepD,GACf,uBAAwBgE,GACxB,sBAAuBD,GACvB,OAAQe,EACV,CAAC,EAOD,IAAMU,GAAmB,CAAClO,EAAa+L,EAAUpG,IAAgB,CAC3D3F,EAAY,MACdmO,GAAiBnO,EAAa+L,EAAUpG,CAAW,GAInDyI,GAAqBrC,CAAQ,EAG7BsC,GAAyBtC,CAAQ,EACjCuC,GAAiBtO,EAAa+L,EAAUpG,CAAW,EAEvD,EAOMwI,GAAmB,CAACnO,EAAa+L,EAAUpG,IAAgB,CAE/DoG,EAAS,MAAM,QAAU,IAAM,CACzB/L,IAAgBuO,GAAiBvO,CAAW,GAAKA,EAAY,OAASA,EAAY,QAGtF2F,EAAYH,GAAc,KAAK,CACjC,CACF,EAMM+I,GAAmBvO,GAChB,CAAC,EAAEA,EAAY,mBAAqBA,EAAY,gBAAkBA,EAAY,kBAAoBA,EAAY,iBAEnHwO,GAAqB,GAKnBJ,GAAuBrC,GAAY,CACvCA,EAAS,MAAM,YAAc,IAAM,CACjCA,EAAS,UAAU,UAAY,SAAUpX,EAAG,CAC1CoX,EAAS,UAAU,UAAY,IAAM,CAAC,EAGlCpX,EAAE,SAAWoX,EAAS,YACxByC,GAAqB,GAEzB,CACF,CACF,EAKMH,GAA2BtC,GAAY,CAC3CA,EAAS,UAAU,YAAcpX,GAAK,CAEhCA,EAAE,SAAWoX,EAAS,WACxBpX,EAAE,eAAe,EAEnBoX,EAAS,MAAM,UAAY,SAAUpX,EAAG,CACtCoX,EAAS,MAAM,UAAY,IAAM,CAAC,GAE9BpX,EAAE,SAAWoX,EAAS,OAASpX,EAAE,kBAAkB,aAAeoX,EAAS,MAAM,SAASpX,EAAE,MAAM,KACpG6Z,GAAqB,GAEzB,CACF,CACF,EAOMF,GAAmB,CAACtO,EAAa+L,EAAUpG,IAAgB,CAC/DoG,EAAS,UAAU,QAAUpX,GAAK,CAChC,GAAI6Z,GAAoB,CACtBA,GAAqB,GACrB,MACF,CACI7Z,EAAE,SAAWoX,EAAS,WAAajV,EAAekJ,EAAY,iBAAiB,GACjF2F,EAAYH,GAAc,QAAQ,CAEtC,CACF,EAEMiJ,GAAkB/U,GAAQ,OAAOA,GAAS,UAAYA,EAAK,OAC3DgV,GAAYhV,GAAQA,aAAgB,SAAW+U,GAAgB/U,CAAI,EACnEiV,GAAeC,GAAQ,CAC3B,IAAMzU,EAAS,CAAC,EAChB,OAAI,OAAOyU,EAAK,CAAC,GAAM,UAAY,CAACF,GAAUE,EAAK,CAAC,CAAC,EACnD,OAAO,OAAOzU,EAAQyU,EAAK,CAAC,CAAC,EAE7B,CAAC,QAAS,OAAQ,MAAM,EAAE,QAAQ,CAACC,EAAMpK,IAAU,CACjD,IAAM1N,EAAM6X,EAAKnK,CAAK,EAClB,OAAO1N,GAAQ,UAAY2X,GAAU3X,CAAG,EAC1CoD,EAAO0U,CAAI,EAAI9X,EACNA,IAAQ,QACjBP,EAAM,sBAAsBqY,CAAI,yCAAyC,OAAO9X,CAAG,EAAE,CAEzF,CAAC,EAEIoD,CACT,EAQA,SAAS2U,MAAQF,EAAM,CACrB,OAAO,IAAI,KAAK,GAAGA,CAAI,CACzB,CAqBA,SAASG,GAAMC,EAAa,CAC1B,MAAMC,UAAkB,IAAK,CAC3B,MAAM9U,EAAQ+U,EAAqB,CACjC,OAAO,MAAM,MAAM/U,EAAQ,OAAO,OAAO,CAAC,EAAG6U,EAAaE,CAAmB,CAAC,CAChF,CACF,CAEA,OAAOD,CACT,CAQA,IAAME,GAAe,IACZ7Z,EAAY,SAAWA,EAAY,QAAQ,aAAa,EAS3D8Z,GAAY,IAAM,CACtB,GAAI9Z,EAAY,QACd,OAAAoH,GAAqB,EACdpH,EAAY,QAAQ,KAAK,CAEpC,EAQM+Z,GAAc,IAAM,CACxB,GAAI/Z,EAAY,QAAS,CACvB,IAAMga,EAAYha,EAAY,QAAQ,MAAM,EAC5C,OAAAgH,GAAwBgT,CAAS,EAC1BA,CACT,CACF,EAQMC,GAAc,IAAM,CACxB,IAAMhT,EAAQjH,EAAY,QAC1B,OAAOiH,IAAUA,EAAM,QAAU6S,GAAU,EAAIC,GAAY,EAC7D,EASMG,GAAgBC,GAAM,CAC1B,GAAIna,EAAY,QAAS,CACvB,IAAMga,EAAYha,EAAY,QAAQ,SAASma,CAAE,EACjD,OAAAnT,GAAwBgT,EAAW,EAAI,EAChCA,CACT,CACF,EASMI,GAAiB,IACd,CAAC,EAAEpa,EAAY,SAAWA,EAAY,QAAQ,UAAU,GAG7Dqa,GAAyB,GACvBC,GAAgB,CAAC,EAKvB,SAASC,GAAiBlP,EAAO,qBAAsB,CACrDiP,GAAcjP,CAAI,EAAI,KACjBgP,KACH,SAAS,KAAK,iBAAiB,QAASG,EAAiB,EACzDH,GAAyB,GAE7B,CACA,IAAMG,GAAoBlM,GAAS,CACjC,QAASzK,EAAKyK,EAAM,OAAQzK,GAAMA,IAAO,SAAUA,EAAKA,EAAG,WACzD,QAAWwH,KAAQiP,GAAe,CAChC,IAAMG,EAAW5W,EAAG,aAAawH,CAAI,EACrC,GAAIoP,EAAU,CACZH,GAAcjP,CAAI,EAAE,KAAK,CACvB,SAAAoP,CACF,CAAC,EACD,MACF,CACF,CAEJ,EAIA,MAAMC,EAAa,CACjB,aAAc,CAEZ,KAAK,OAAS,CAAC,CACjB,CAMA,wBAAwBC,EAAW,CACjC,OAAI,OAAO,KAAK,OAAOA,CAAS,EAAM,MAGpC,KAAK,OAAOA,CAAS,EAAI,CAAC,GAErB,KAAK,OAAOA,CAAS,CAC9B,CAMA,GAAGA,EAAWC,EAAc,CAC1B,IAAMC,EAAkB,KAAK,wBAAwBF,CAAS,EACzDE,EAAgB,SAASD,CAAY,GACxCC,EAAgB,KAAKD,CAAY,CAErC,CAMA,KAAKD,EAAWC,EAAc,CAI5B,IAAME,EAAS,IAAIxB,IAAS,CAC1B,KAAK,eAAeqB,EAAWG,CAAM,EACrCF,EAAa,MAAM,KAAMtB,CAAI,CAC/B,EACA,KAAK,GAAGqB,EAAWG,CAAM,CAC3B,CAMA,KAAKH,KAAcrB,EAAM,CACvB,KAAK,wBAAwBqB,CAAS,EAAE,QAIxCC,GAAgB,CACd,GAAI,CACFA,EAAa,MAAM,KAAMtB,CAAI,CAC/B,OAASpY,EAAO,CACd,QAAQ,MAAMA,CAAK,CACrB,CACF,CAAC,CACH,CAMA,eAAeyZ,EAAWC,EAAc,CACtC,IAAMC,EAAkB,KAAK,wBAAwBF,CAAS,EACxDxL,EAAQ0L,EAAgB,QAAQD,CAAY,EAC9CzL,EAAQ,IACV0L,EAAgB,OAAO1L,EAAO,CAAC,CAEnC,CAKA,mBAAmBwL,EAAW,CACxB,KAAK,OAAOA,CAAS,IAAM,SAE7B,KAAK,OAAOA,CAAS,EAAE,OAAS,EAEpC,CACA,OAAQ,CACN,KAAK,OAAS,CAAC,CACjB,CACF,CAEA3a,EAAY,aAAe,IAAI0a,GAqC/B,IAAIK,GAA6B,OAAO,OAAO,CAC7C,UAAW,KACX,aAAc1B,GACd,iBAAkBkB,GAClB,YAAavK,GACb,aAAcJ,GACd,UAAWE,GACX,cAAe6D,GACf,KAAM6F,GACN,WAAYzW,GACZ,gBAAiBJ,GACjB,eAAgBO,GAChB,iBAAkBR,EAClB,aAAcb,EACd,cAAee,GACf,qBAAsBQ,GACtB,UAAWJ,GACX,iBAAkBV,EAClB,QAASH,GACT,eAAgBC,GAChB,SAAUG,EACV,cAAeM,GACf,UAAWC,GACX,SAAUZ,EACV,iBAAkBM,EAClB,aAAcqX,GACd,oBAAqB5W,GACrB,SAAUZ,EACV,qBAAsBI,EACtB,cAAeyX,GACf,sBAAuBtC,GACvB,UAAW1T,GACX,eAAgBkW,GAChB,qBAAsBzC,GACtB,iBAAkBF,GAClB,UAAW9H,GACX,MAAO8J,GACP,IApDU,CAACkB,EAAWC,IAAiB,CAEvC,GAAI,CAACD,EAAW,CACd3a,EAAY,aAAa,MAAM,EAC/B,MACF,CACI4a,EAEF5a,EAAY,aAAa,eAAe2a,EAAWC,CAAY,EAG/D5a,EAAY,aAAa,mBAAmB2a,CAAS,CAEzD,EAwCE,GArES,CAACA,EAAWC,IAAiB,CACtC5a,EAAY,aAAa,GAAG2a,EAAWC,CAAY,CACrD,EAoEE,KA9DW,CAACD,EAAWC,IAAiB,CACxC5a,EAAY,aAAa,KAAK2a,EAAWC,CAAY,CACvD,EA6DE,YAAab,GACb,YAAapG,GACb,UAAWmG,GACX,YAAaG,EACf,CAAC,EAED,MAAMe,EAAM,CAKV,YAAYC,EAAUC,EAAO,CAC3B,KAAK,SAAWD,EAChB,KAAK,UAAYC,EACjB,KAAK,QAAU,GACf,KAAK,MAAM,CACb,CAKA,OAAQ,CACN,OAAK,KAAK,UACR,KAAK,QAAU,GACf,KAAK,QAAU,IAAI,KACnB,KAAK,GAAK,WAAW,KAAK,SAAU,KAAK,SAAS,GAE7C,KAAK,SACd,CAKA,MAAO,CACL,OAAI,KAAK,SAAW,KAAK,UACvB,KAAK,QAAU,GACf,aAAa,KAAK,EAAE,EACpB,KAAK,WAAa,IAAI,KAAK,EAAE,QAAQ,EAAI,KAAK,QAAQ,QAAQ,GAEzD,KAAK,SACd,CAMA,SAAS3b,EAAG,CACV,IAAM4b,EAAU,KAAK,QACrB,OAAIA,GACF,KAAK,KAAK,EAEZ,KAAK,WAAa5b,EACd4b,GACF,KAAK,MAAM,EAEN,KAAK,SACd,CAKA,cAAe,CACb,OAAI,KAAK,UACP,KAAK,KAAK,EACV,KAAK,MAAM,GAEN,KAAK,SACd,CAKA,WAAY,CACV,OAAO,KAAK,OACd,CACF,CAEA,IAAMC,GAAmB,CAAC,aAAc,YAAa,aAAa,EAM5DC,GAAoBxW,GAAU,CAClC,IAAM4V,EAAW,OAAO5V,EAAO,UAAa,SAA8C,SAAS,cAAcA,EAAO,QAAQ,EAAKA,EAAO,SAC5I,GAAI,CAAC4V,EACH,MAAO,CAAC,EAGV,IAAMa,EAAkBb,EAAS,QACjC,OAAAc,GAAwBD,CAAe,EACxB,OAAO,OAAOE,GAAcF,CAAe,EAAGG,GAAsBH,CAAe,EAAGI,GAAeJ,CAAe,EAAGK,GAAaL,CAAe,EAAGM,GAAYN,CAAe,EAAGO,GAAaP,CAAe,EAAGQ,GAAoBR,EAAiBF,EAAgB,CAAC,CAE1R,EAMMI,GAAgBF,GAAmB,CAEvC,IAAM7F,EAAS,CAAC,EAGhB,OADmB,MAAM,KAAK6F,EAAgB,iBAAiB,YAAY,CAAC,EACjE,QAAQ3S,GAAS,CAC1BoT,GAA0BpT,EAAO,CAAC,OAAQ,OAAO,CAAC,EAClD,IAAM+O,EAAkD/O,EAAM,aAAa,MAAM,EAC3E7C,EAAQ6C,EAAM,aAAa,OAAO,EACpC,CAAC+O,GAAa,CAAC5R,IAGf,OAAOuR,GAAcK,CAAS,GAAM,UACtCjC,EAAOiC,CAAS,EAAI5R,IAAU,QACrB,OAAOuR,GAAcK,CAAS,GAAM,SAC7CjC,EAAOiC,CAAS,EAAI,KAAK,MAAM5R,CAAK,EAEpC2P,EAAOiC,CAAS,EAAI5R,EAExB,CAAC,EACM2P,CACT,EAMMgG,GAAwBH,GAAmB,CAE/C,IAAM7F,EAAS,CAAC,EAGhB,OADsB,MAAM,KAAK6F,EAAgB,iBAAiB,qBAAqB,CAAC,EAC1E,QAAQ3S,GAAS,CAC7B,IAAM+O,EAAkD/O,EAAM,aAAa,MAAM,EAC3E7C,EAAQ6C,EAAM,aAAa,OAAO,EACpC,CAAC+O,GAAa,CAAC5R,IAGnB2P,EAAOiC,CAAS,EAAI,IAAI,SAAS,UAAU5R,CAAK,EAAE,EAAE,EACtD,CAAC,EACM2P,CACT,EAMMiG,GAAiBJ,GAAmB,CAExC,IAAM7F,EAAS,CAAC,EAGhB,OADoB,MAAM,KAAK6F,EAAgB,iBAAiB,aAAa,CAAC,EAClE,QAAQ7R,GAAU,CAC5BsS,GAA0BtS,EAAQ,CAAC,OAAQ,QAAS,YAAY,CAAC,EACjE,IAAMwM,EAAOxM,EAAO,aAAa,MAAM,EACnC,CAACwM,GAAQ,CAAC,CAAC,UAAW,SAAU,MAAM,EAAE,SAASA,CAAI,IAGzDR,EAAO,GAAGQ,CAAI,YAAY,EAAIxM,EAAO,UACrCgM,EAAO,OAAO3U,EAAsBmV,CAAI,CAAC,QAAQ,EAAI,GACjDxM,EAAO,aAAa,OAAO,IAC7BgM,EAAO,GAAGQ,CAAI,aAAa,EAAIxM,EAAO,aAAa,OAAO,GAExDA,EAAO,aAAa,YAAY,IAClCgM,EAAO,GAAGQ,CAAI,iBAAiB,EAAIxM,EAAO,aAAa,YAAY,GAEvE,CAAC,EACMgM,CACT,EAMMkG,GAAeL,GAAmB,CACtC,IAAM7F,EAAS,CAAC,EAEV9H,EAAQ2N,EAAgB,cAAc,YAAY,EACxD,OAAI3N,IACFoO,GAA0BpO,EAAO,CAAC,MAAO,QAAS,SAAU,KAAK,CAAC,EAC9DA,EAAM,aAAa,KAAK,IAC1B8H,EAAO,SAAW9H,EAAM,aAAa,KAAK,GAAK,QAE7CA,EAAM,aAAa,OAAO,IAC5B8H,EAAO,WAAa9H,EAAM,aAAa,OAAO,GAAK,QAEjDA,EAAM,aAAa,QAAQ,IAC7B8H,EAAO,YAAc9H,EAAM,aAAa,QAAQ,GAAK,QAEnDA,EAAM,aAAa,KAAK,IAC1B8H,EAAO,SAAW9H,EAAM,aAAa,KAAK,GAAK,SAG5C8H,CACT,EAMMmG,GAAcN,GAAmB,CACrC,IAAM7F,EAAS,CAAC,EAEV7U,EAAO0a,EAAgB,cAAc,WAAW,EACtD,OAAI1a,IACFmb,GAA0Bnb,EAAM,CAAC,OAAQ,OAAO,CAAC,EAC7CA,EAAK,aAAa,MAAM,IAC1B6U,EAAO,KAAO7U,EAAK,aAAa,MAAM,GAEpCA,EAAK,aAAa,OAAO,IAC3B6U,EAAO,UAAY7U,EAAK,aAAa,OAAO,GAE9C6U,EAAO,SAAW7U,EAAK,WAElB6U,CACT,EAMMoG,GAAeP,GAAmB,CAEtC,IAAM7F,EAAS,CAAC,EAEVrQ,EAAQkW,EAAgB,cAAc,YAAY,EACpDlW,IACF2W,GAA0B3W,EAAO,CAAC,OAAQ,QAAS,cAAe,OAAO,CAAC,EAC1EqQ,EAAO,MAAQrQ,EAAM,aAAa,MAAM,GAAK,OACzCA,EAAM,aAAa,OAAO,IAC5BqQ,EAAO,WAAarQ,EAAM,aAAa,OAAO,GAE5CA,EAAM,aAAa,aAAa,IAClCqQ,EAAO,iBAAmBrQ,EAAM,aAAa,aAAa,GAExDA,EAAM,aAAa,OAAO,IAC5BqQ,EAAO,WAAarQ,EAAM,aAAa,OAAO,IAIlD,IAAMmP,EAAe,MAAM,KAAK+G,EAAgB,iBAAiB,mBAAmB,CAAC,EACrF,OAAI/G,EAAa,SACfkB,EAAO,aAAe,CAAC,EACvBlB,EAAa,QAAQQ,GAAU,CAC7BgH,GAA0BhH,EAAQ,CAAC,OAAO,CAAC,EAC3C,IAAMD,EAAcC,EAAO,aAAa,OAAO,EAC/C,GAAI,CAACD,EACH,OAEF,IAAMkH,GAAajH,EAAO,UAC1BU,EAAO,aAAaX,CAAW,EAAIkH,EACrC,CAAC,GAEIvG,CACT,EAOMqG,GAAsB,CAACR,EAAiBW,IAAe,CAE3D,IAAMxG,EAAS,CAAC,EAChB,QAAW9Q,KAAKsX,EAAY,CAC1B,IAAMvE,EAAYuE,EAAWtX,CAAC,EAExBuX,EAAMZ,EAAgB,cAAc5D,CAAS,EAC/CwE,IACFH,GAA0BG,EAAK,CAAC,CAAC,EACjCzG,EAAOiC,EAAU,QAAQ,SAAU,EAAE,CAAC,EAAIwE,EAAI,UAAU,KAAK,EAEjE,CACA,OAAOzG,CACT,EAKM8F,GAA0BD,GAAmB,CACjD,IAAMa,EAAkBf,GAAiB,OAAO,CAAC,aAAc,sBAAuB,cAAe,aAAc,YAAa,aAAc,mBAAmB,CAAC,EAClK,MAAM,KAAKE,EAAgB,QAAQ,EAAE,QAAQzX,GAAM,CACjD,IAAMuY,EAAUvY,EAAG,QAAQ,YAAY,EAClCsY,EAAgB,SAASC,CAAO,GACnCpb,EAAK,yBAAyBob,CAAO,GAAG,CAE5C,CAAC,CACH,EAMML,GAA4B,CAAClY,EAAIwY,IAAsB,CAC3D,MAAM,KAAKxY,EAAG,UAAU,EAAE,QAAQyY,GAAa,CACzCD,EAAkB,QAAQC,EAAU,IAAI,IAAM,IAChDtb,EAAK,CAAC,2BAA2Bsb,EAAU,IAAI,SAASzY,EAAG,QAAQ,YAAY,CAAC,KAAM,GAAGwY,EAAkB,OAAS,2BAA2BA,EAAkB,KAAK,IAAI,CAAC,GAAK,gDAAgD,EAAE,CAAC,CAEvO,CAAC,CACH,EAEME,GAAqB,GAOrBC,GAAY3X,GAAU,CAC1B,IAAM7C,EAAYH,EAAa,EACzBwB,EAAQnB,EAAS,EACnB,OAAO2C,EAAO,UAAa,YAC7BA,EAAO,SAASxB,CAAK,EAEvBrD,EAAY,aAAa,KAAK,WAAYqD,CAAK,EAE/C,IAAMkP,EADa,OAAO,iBAAiB,SAAS,IAAI,EACjB,UACvCkK,GAAWza,EAAWqB,EAAOwB,CAAM,EAGnC,WAAW,IAAM,CACf6X,GAAuB1a,EAAWqB,CAAK,CACzC,EAAGkZ,EAAkB,EACjBxY,GAAQ,IACV4Y,GAAmB3a,EAAW6C,EAAO,iBAAkB0N,CAAmB,EAC1EhB,GAAc,GAEZ,CAACtN,GAAQ,GAAK,CAACjE,EAAY,wBAC7BA,EAAY,sBAAwB,SAAS,eAE3C,OAAO6E,EAAO,SAAY,YAC5B,WAAW,IAAMA,EAAO,QAAQxB,CAAK,CAAC,EAExCrD,EAAY,aAAa,KAAK,UAAWqD,CAAK,EAC9CoC,GAAYzD,EAAWxB,EAAY,eAAe,CAAC,CACrD,EAKMoc,GAA4BtO,GAAS,CACzC,IAAMjL,EAAQnB,EAAS,EACvB,GAAIoM,EAAM,SAAWjL,EACnB,OAEF,IAAMrB,EAAYH,EAAa,EAC/BwB,EAAM,oBAAoB,eAAgBuZ,EAAyB,EACnEvZ,EAAM,oBAAoB,gBAAiBuZ,EAAyB,EACpE5a,EAAU,MAAM,UAAY,MAC9B,EAMM0a,GAAyB,CAAC1a,EAAWqB,IAAU,CAC/CuD,GAAgBvD,CAAK,GACvBrB,EAAU,MAAM,UAAY,SAC5BqB,EAAM,iBAAiB,eAAgBuZ,EAAyB,EAChEvZ,EAAM,iBAAiB,gBAAiBuZ,EAAyB,GAEjE5a,EAAU,MAAM,UAAY,MAEhC,EAOM2a,GAAqB,CAAC3a,EAAW6a,EAAkBtK,IAAwB,CAC/Eb,GAAO,EACHmL,GAAoBtK,IAAwB,UAC9CD,GAA4BC,CAAmB,EAIjD,WAAW,IAAM,CACfvQ,EAAU,UAAY,CACxB,CAAC,CACH,EAOMya,GAAa,CAACza,EAAWqB,EAAOwB,IAAW,CAC/CG,GAAShD,EAAW6C,EAAO,UAAU,QAAQ,EACzCA,EAAO,WAETxB,EAAM,MAAM,YAAY,UAAW,IAAK,WAAW,EACnD0C,GAAK1C,EAAO,MAAM,EAClB,WAAW,IAAM,CAEf2B,GAAS3B,EAAOwB,EAAO,UAAU,KAAK,EAEtCxB,EAAM,MAAM,eAAe,SAAS,CACtC,EAAGkZ,EAAkB,GAErBxW,GAAK1C,EAAO,MAAM,EAEpB2B,GAAS,CAAC,SAAS,gBAAiB,SAAS,IAAI,EAAGxE,EAAY,KAAK,EACjEqE,EAAO,YAAcA,EAAO,UAAY,CAACA,EAAO,OAClDG,GAAS,CAAC,SAAS,gBAAiB,SAAS,IAAI,EAAGxE,EAAY,aAAa,CAAC,CAElF,EAEA,IAAIsc,GAAyB,CAM3B,MAAO,CAACC,EAAQ5G,IACP,oDAAoD,KAAK4G,CAAM,EAAI,QAAQ,QAAQ,EAAI,QAAQ,QAAQ5G,GAAqB,uBAAuB,EAO5J,IAAK,CAAC4G,EAAQ5G,IAEL,8FAA8F,KAAK4G,CAAM,EAAI,QAAQ,QAAQ,EAAI,QAAQ,QAAQ5G,GAAqB,aAAa,CAE9L,EAKA,SAAS6G,GAA0BnY,EAAQ,CAErCA,EAAO,iBAGPA,EAAO,QAAU,UACnBA,EAAO,eAAiBiY,GAAuB,OAE7CjY,EAAO,QAAU,QACnBA,EAAO,eAAiBiY,GAAuB,KAEnD,CAKA,SAASG,GAA4BpY,EAAQ,EAEvC,CAACA,EAAO,QAAU,OAAOA,EAAO,QAAW,UAAY,CAAC,SAAS,cAAcA,EAAO,MAAM,GAAK,OAAOA,EAAO,QAAW,UAAY,CAACA,EAAO,OAAO,eACvJ7D,EAAK,qDAAqD,EAC1D6D,EAAO,OAAS,OAEpB,CAOA,SAASqY,GAAcrY,EAAQ,CAC7BmY,GAA0BnY,CAAM,EAG5BA,EAAO,qBAAuB,CAACA,EAAO,YACxC7D,EAAK;AAAA;AAAA,4CAA4M,EAEnNic,GAA4BpY,CAAM,EAG9B,OAAOA,EAAO,OAAU,WAC1BA,EAAO,MAAQA,EAAO,MAAM,MAAM;AAAA,CAAI,EAAE,KAAK,QAAQ,GAEvD2D,EAAK3D,CAAM,CACb,CAGA,IAAIsY,GACJ,IAAIC,GAAwB,IAAI,QAChC,MAAMC,EAAW,CAKf,eAAe/D,EAAM,CAMnB,GAFA1Z,EAA2B,KAAMwd,GAAU,MAAM,EAE7C,OAAO,OAAW,IACpB,OAEFD,GAAkB,KAGlB,IAAMG,EAAc,OAAO,OAAO,KAAK,YAAY,aAAahE,CAAI,CAAC,EAGrE,KAAK,OAASgE,EAGd,KAAK,kBAAoB,GACzBzd,EAAuBud,GAAU,KAAM,KAAK,MAAMD,GAAgB,MAAM,CAAC,CAC3E,CACA,MAAMI,EAAY7D,EAAc,CAAC,EAAG,CAElC,GADAzB,GAAsB,OAAO,OAAO,CAAC,EAAGyB,EAAa6D,CAAU,CAAC,EAC5Dvd,EAAY,gBAAiB,CAC/B,IAAMgT,EAAqB1B,GAAe,mBAAmB,IAAItR,EAAY,eAAe,EACtF,CACJ,kBAAAwd,EACF,EAAIxd,EAAY,gBAChBA,EAAY,gBAAgB,SAAS,EAChCwd,IACHxK,EAAmB,CACjB,YAAa,EACf,CAAC,EAECjP,GAAQ,GACVyN,GAAgB,CAEpB,CACAxR,EAAY,gBAAkBmd,GAC9B,IAAMzS,EAAc+S,GAAcF,EAAY7D,CAAW,EACzDwD,GAAcxS,CAAW,EACzB,OAAO,OAAOA,CAAW,EAGrB1K,EAAY,UACdA,EAAY,QAAQ,KAAK,EACzB,OAAOA,EAAY,SAIrB,aAAaA,EAAY,mBAAmB,EAC5C,IAAMyW,EAAWiH,GAAiBP,EAAe,EACjD,OAAAzN,GAAOyN,GAAiBzS,CAAW,EACnCH,GAAa,YAAY,IAAI4S,GAAiBzS,CAAW,EAClDiT,GAAYR,GAAiB1G,EAAU/L,CAAW,CAC3D,CAGA,KAAKkT,EAAa,CAChB,OAAOne,EAAuB2d,GAAU,IAAI,EAAE,KAAKQ,CAAW,CAChE,CACA,QAAQC,EAAW,CACjB,OAAOpe,EAAuB2d,GAAU,IAAI,EAAE,QAAQS,CAAS,CACjE,CACF,CAQA,IAAMF,GAAc,CAAC5U,EAAU0N,EAAU/L,IAChC,IAAI,QAAQ,CAACtK,EAAS0d,IAAW,CAKtC,IAAMzN,EAAc0N,IAAW,CAC7BhV,EAAS,MAAM,CACb,YAAa,GACb,QAAAgV,EACF,CAAC,CACH,EACAzM,GAAe,mBAAmB,IAAIvI,EAAU3I,CAAO,EACvDkR,GAAe,kBAAkB,IAAIvI,EAAU+U,CAAM,EACrDrH,EAAS,cAAc,QAAU,IAAM,CACrCd,GAAyB5M,CAAQ,CACnC,EACA0N,EAAS,WAAW,QAAU,IAAM,CAClCX,GAAsB/M,CAAQ,CAChC,EACA0N,EAAS,aAAa,QAAU,IAAM,CACpCT,GAAwBjN,EAAUsH,CAAW,CAC/C,EACAoG,EAAS,YAAY,QAAU,IAAM,CACnCpG,EAAYH,GAAc,KAAK,CACjC,EACA0I,GAAiBlO,EAAa+L,EAAUpG,CAAW,EACnDD,GAAkBpQ,EAAa0K,EAAa2F,CAAW,EACvD0D,GAA2BhL,EAAU2B,CAAW,EAChD8R,GAAU9R,CAAW,EACrBsT,GAAWhe,EAAa0K,EAAa2F,CAAW,EAChD4N,GAAUxH,EAAU/L,CAAW,EAG/B,WAAW,IAAM,CACf+L,EAAS,UAAU,UAAY,CACjC,CAAC,CACH,CAAC,EAQGgH,GAAgB,CAACF,EAAY7D,IAAgB,CACjD,IAAMwE,EAAiB7C,GAAkBkC,CAAU,EAC7C1Y,EAAS,OAAO,OAAO,CAAC,EAAGwS,GAAeqC,EAAawE,EAAgBX,CAAU,EACvF,OAAA1Y,EAAO,UAAY,OAAO,OAAO,CAAC,EAAGwS,GAAc,UAAWxS,EAAO,SAAS,EAC9EA,EAAO,UAAY,OAAO,OAAO,CAAC,EAAGwS,GAAc,UAAWxS,EAAO,SAAS,EAC1EA,EAAO,YAAc,KACvBA,EAAO,UAAY,CACjB,SAAU,mBACZ,EACAA,EAAO,UAAY,CAAC,GAEfA,CACT,EAMM6Y,GAAmB3U,GAAY,CACnC,IAAM0N,EAAW,CACf,MAAOvU,EAAS,EAChB,UAAWL,EAAa,EACxB,QAASkB,GAAW,EACpB,cAAeL,EAAiB,EAChC,WAAYE,GAAc,EAC1B,aAAcD,GAAgB,EAC9B,OAAQG,GAAU,EAClB,YAAaI,GAAe,EAC5B,kBAAmBT,EAAqB,EACxC,cAAeD,EAAiB,CAClC,EACA,OAAA+H,GAAa,SAAS,IAAIxB,EAAU0N,CAAQ,EACrCA,CACT,EAOMuH,GAAa,CAAChe,EAAa0K,EAAa2F,IAAgB,CAC5D,IAAMlJ,EAAmBlE,GAAoB,EAC7CgD,GAAKkB,CAAgB,EACjBuD,EAAY,QACd1K,EAAY,QAAU,IAAIgb,GAAM,IAAM,CACpC3K,EAAY,OAAO,EACnB,OAAOrQ,EAAY,OACrB,EAAG0K,EAAY,KAAK,EAChBA,EAAY,mBACd3E,GAAKoB,CAAgB,EACrBrC,GAAiBqC,EAAkBuD,EAAa,kBAAkB,EAClE,WAAW,IAAM,CACX1K,EAAY,SAAWA,EAAY,QAAQ,SAE7CgH,GAAwB0D,EAAY,KAAK,CAE7C,CAAC,GAGP,EAeMuT,GAAY,CAACxH,EAAU/L,IAAgB,CAC3C,GAAI,CAAAA,EAAY,MAIhB,IAAI,CAAClJ,EAAekJ,EAAY,aAAa,EAAG,CAC9CrJ,EAAqB,eAAe,EACpC8c,GAAkB,EAClB,MACF,CACIC,GAAe3H,CAAQ,GAGvB4H,GAAY5H,EAAU/L,CAAW,GAGrC6F,GAAS,GAAI,CAAC,EAChB,EAMM6N,GAAiB3H,GAAY,CACjC,IAAM6H,EAAoB,MAAM,KAAK7H,EAAS,MAAM,iBAAiB,aAAa,CAAC,EACnF,QAAW8H,KAAoBD,EAC7B,GAAIC,aAA4B,aAAeza,GAAYya,CAAgB,EACzE,OAAAA,EAAiB,MAAM,EAChB,GAGX,MAAO,EACT,EAOMF,GAAc,CAAC5H,EAAU/L,IACzBA,EAAY,WAAa5G,GAAY2S,EAAS,UAAU,GAC1DA,EAAS,WAAW,MAAM,EACnB,IAEL/L,EAAY,aAAe5G,GAAY2S,EAAS,YAAY,GAC9DA,EAAS,aAAa,MAAM,EACrB,IAEL/L,EAAY,cAAgB5G,GAAY2S,EAAS,aAAa,GAChEA,EAAS,cAAc,MAAM,EACtB,IAEF,GAEH0H,GAAoB,IAAM,CAC1B,SAAS,yBAAyB,aAAe,OAAO,SAAS,cAAc,MAAS,YAC1F,SAAS,cAAc,KAAK,CAEhC,EAGAd,GAAW,UAAU,eAAiBrG,GACtCqG,GAAW,UAAU,cAAgBtG,GACrCsG,GAAW,UAAU,SAAW1G,GAChC0G,GAAW,UAAU,aAAenG,GACpCmG,GAAW,UAAU,YAAcpG,GACnCoG,GAAW,UAAU,YAAc7G,GACnC6G,GAAW,UAAU,eAAiB7G,GACtC6G,GAAW,UAAU,sBAAwBlG,GAC7CkG,GAAW,UAAU,uBAAyBjG,GAC9CiG,GAAW,UAAU,MAAQxK,GAC7BwK,GAAW,UAAU,WAAaxK,GAClCwK,GAAW,UAAU,WAAaxK,GAClCwK,GAAW,UAAU,WAAaxK,GAClCwK,GAAW,UAAU,cAAgBjK,GACrCiK,GAAW,UAAU,OAASnF,GAC9BmF,GAAW,UAAU,SAAW/E,GAGhC,OAAO,OAAO+E,GAAYtC,EAAa,EAGvC,OAAO,KAAKpC,EAAe,EAAE,QAAQzH,GAAO,CAK1CmM,GAAWnM,CAAG,EAAI,YAAaoI,EAAM,CACnC,OAAI6D,IAAmBA,GAAgBjM,CAAG,EACjCiM,GAAgBjM,CAAG,EAAE,GAAGoI,CAAI,EAE9B,IACT,CACF,CAAC,EACD+D,GAAW,cAAgBnN,GAC3BmN,GAAW,QAAU,UAErB,IAAMxJ,GAAOwJ,GAEb,OAAAxJ,GAAK,QAAUA,GAERA,EAET,CAAE,EACE,OAAO7U,GAAS,KAAeA,GAAK,cAAaA,GAAK,KAAOA,GAAK,WAAaA,GAAK,KAAOA,GAAK,WAAaA,GAAK,aACzG,OAAO,SAApB,KAA8B,SAASK,EAAEC,EAAE,CAAC,IAAIC,EAAEF,EAAE,cAAc,OAAO,EAAE,GAAGA,EAAE,qBAAqB,MAAM,EAAE,CAAC,EAAE,YAAYE,CAAC,EAAEA,EAAE,WAAWA,EAAE,WAAW,WAAWA,EAAE,WAAW,QAAQD,OAAQ,IAAG,CAACC,EAAE,UAAUD,CAAC,MAAS,CAACC,EAAE,UAAUD,CAAC,CAAC,EAAE,SAAS,047BAAk57B,ICzgJvo8B,IAAIkf,GAAM,KAAK,IACXC,GAAM,KAAK,IACXC,GAAQ,KAAK,MACbC,GAAQ,KAAK,MACbC,GAAgBC,IAAO,CACzB,EAAGA,EACH,EAAGA,CACL,GACIC,GAAkB,CACpB,KAAM,QACN,MAAO,OACP,OAAQ,MACR,IAAK,QACP,EACIC,GAAuB,CACzB,MAAO,MACP,IAAK,OACP,EACA,SAASC,GAAMC,EAAOC,EAAOC,EAAK,CAChC,OAAOV,GAAIQ,EAAOT,GAAIU,EAAOC,CAAG,CAAC,CACnC,CACA,SAASC,GAASF,EAAOG,EAAO,CAC9B,OAAO,OAAOH,GAAU,WAAaA,EAAMG,CAAK,EAAIH,CACtD,CACA,SAASI,GAAQC,EAAW,CAC1B,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,CAC/B,CACA,SAASC,GAAaD,EAAW,CAC/B,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,CAC/B,CACA,SAASE,GAAgBC,EAAM,CAC7B,OAAOA,IAAS,IAAM,IAAM,GAC9B,CACA,SAASC,GAAcD,EAAM,CAC3B,OAAOA,IAAS,IAAM,SAAW,OACnC,CACA,SAASE,GAAYL,EAAW,CAC9B,MAAO,CAAC,MAAO,QAAQ,EAAE,SAASD,GAAQC,CAAS,CAAC,EAAI,IAAM,GAChE,CACA,SAASM,GAAiBN,EAAW,CACnC,OAAOE,GAAgBG,GAAYL,CAAS,CAAC,CAC/C,CACA,SAASO,GAAkBP,EAAWQ,EAAOC,EAAK,CAC5CA,IAAQ,SACVA,EAAM,IAER,IAAMC,EAAYT,GAAaD,CAAS,EAClCW,EAAgBL,GAAiBN,CAAS,EAC1CY,EAASR,GAAcO,CAAa,EACtCE,EAAoBF,IAAkB,IAAMD,KAAeD,EAAM,MAAQ,SAAW,QAAU,OAASC,IAAc,QAAU,SAAW,MAC9I,OAAIF,EAAM,UAAUI,CAAM,EAAIJ,EAAM,SAASI,CAAM,IACjDC,EAAoBC,GAAqBD,CAAiB,GAErD,CAACA,EAAmBC,GAAqBD,CAAiB,CAAC,CACpE,CACA,SAASE,GAAsBf,EAAW,CACxC,IAAMgB,EAAoBF,GAAqBd,CAAS,EACxD,MAAO,CAACiB,GAA8BjB,CAAS,EAAGgB,EAAmBC,GAA8BD,CAAiB,CAAC,CACvH,CACA,SAASC,GAA8BjB,EAAW,CAChD,OAAOA,EAAU,QAAQ,aAAeU,GAAclB,GAAqBkB,CAAS,CAAC,CACvF,CACA,SAASQ,GAAYC,EAAMC,EAASX,EAAK,CACvC,IAAMY,EAAK,CAAC,OAAQ,OAAO,EACrBC,EAAK,CAAC,QAAS,MAAM,EACrBC,EAAK,CAAC,MAAO,QAAQ,EACrBC,EAAK,CAAC,SAAU,KAAK,EAC3B,OAAQL,EAAM,CACZ,IAAK,MACL,IAAK,SACH,OAAIV,EACKW,EAAUE,EAAKD,EACjBD,EAAUC,EAAKC,EACxB,IAAK,OACL,IAAK,QACH,OAAOF,EAAUG,EAAKC,EACxB,QACE,MAAO,CAAC,CACZ,CACF,CACA,SAASC,GAA0BzB,EAAW0B,EAAeC,EAAWlB,EAAK,CAC3E,IAAMC,EAAYT,GAAaD,CAAS,EACpC4B,EAAOV,GAAYnB,GAAQC,CAAS,EAAG2B,IAAc,QAASlB,CAAG,EACrE,OAAIC,IACFkB,EAAOA,EAAK,IAAKT,GAASA,EAAO,IAAMT,CAAS,EAC5CgB,IACFE,EAAOA,EAAK,OAAOA,EAAK,IAAIX,EAA6B,CAAC,IAGvDW,CACT,CACA,SAASd,GAAqBd,EAAW,CACvC,OAAOA,EAAU,QAAQ,yBAA2BmB,GAAS5B,GAAgB4B,CAAI,CAAC,CACpF,CACA,SAASU,GAAoBC,EAAS,CACpC,MAAO,CACL,IAAK,EACL,MAAO,EACP,OAAQ,EACR,KAAM,EACN,GAAGA,CACL,CACF,CACA,SAASC,GAAiBD,EAAS,CACjC,OAAO,OAAOA,GAAY,SAAWD,GAAoBC,CAAO,EAAI,CAClE,IAAKA,EACL,MAAOA,EACP,OAAQA,EACR,KAAMA,CACR,CACF,CACA,SAASE,GAAiBC,EAAM,CAC9B,MAAO,CACL,GAAGA,EACH,IAAKA,EAAK,EACV,KAAMA,EAAK,EACX,MAAOA,EAAK,EAAIA,EAAK,MACrB,OAAQA,EAAK,EAAIA,EAAK,MACxB,CACF,CAGA,SAASC,GAA2BC,EAAMnC,EAAWS,EAAK,CACxD,GAAI,CACF,UAAA2B,EACA,SAAAC,CACF,EAAIF,EACEG,EAAWjC,GAAYL,CAAS,EAChCW,EAAgBL,GAAiBN,CAAS,EAC1CuC,EAAcnC,GAAcO,CAAa,EACzCQ,EAAOpB,GAAQC,CAAS,EACxBwC,EAAaF,IAAa,IAC1BG,EAAUL,EAAU,EAAIA,EAAU,MAAQ,EAAIC,EAAS,MAAQ,EAC/DK,EAAUN,EAAU,EAAIA,EAAU,OAAS,EAAIC,EAAS,OAAS,EACjEM,EAAcP,EAAUG,CAAW,EAAI,EAAIF,EAASE,CAAW,EAAI,EACrEK,EACJ,OAAQzB,EAAM,CACZ,IAAK,MACHyB,EAAS,CACP,EAAGH,EACH,EAAGL,EAAU,EAAIC,EAAS,MAC5B,EACA,MACF,IAAK,SACHO,EAAS,CACP,EAAGH,EACH,EAAGL,EAAU,EAAIA,EAAU,MAC7B,EACA,MACF,IAAK,QACHQ,EAAS,CACP,EAAGR,EAAU,EAAIA,EAAU,MAC3B,EAAGM,CACL,EACA,MACF,IAAK,OACHE,EAAS,CACP,EAAGR,EAAU,EAAIC,EAAS,MAC1B,EAAGK,CACL,EACA,MACF,QACEE,EAAS,CACP,EAAGR,EAAU,EACb,EAAGA,EAAU,CACf,CACJ,CACA,OAAQnC,GAAaD,CAAS,EAAG,CAC/B,IAAK,QACH4C,EAAOjC,CAAa,GAAKgC,GAAelC,GAAO+B,EAAa,GAAK,GACjE,MACF,IAAK,MACHI,EAAOjC,CAAa,GAAKgC,GAAelC,GAAO+B,EAAa,GAAK,GACjE,KACJ,CACA,OAAOI,CACT,CACA,IAAIC,GAAkB,MAAOT,EAAWC,EAAUS,IAAW,CAC3D,GAAM,CACJ,UAAA9C,EAAY,SACZ,SAAA+C,EAAW,WACX,WAAAC,EAAa,CAAC,EACd,SAAUC,CACZ,EAAIH,EACEI,EAAkBF,EAAW,OAAO,OAAO,EAC3CvC,EAAM,MAAOwC,EAAU,OAAS,KAAO,OAASA,EAAU,MAAMZ,CAAQ,GAC1E7B,EAAQ,MAAMyC,EAAU,gBAAgB,CAC1C,UAAAb,EACA,SAAAC,EACA,SAAAU,CACF,CAAC,EACG,CACF,EAAAI,EACA,EAAAC,CACF,EAAIlB,GAA2B1B,EAAOR,EAAWS,CAAG,EAChD4C,EAAoBrD,EACpBsD,EAAiB,CAAC,EAClBC,EAAa,EACjB,QAASC,EAAI,EAAGA,EAAIN,EAAgB,OAAQM,IAAK,CAC/C,GAAM,CACJ,KAAAC,EACA,GAAAC,CACF,EAAIR,EAAgBM,CAAC,EACf,CACJ,EAAGG,EACH,EAAGC,EACH,KAAAC,EACA,MAAAC,CACF,EAAI,MAAMJ,EAAG,CACX,EAAAP,EACA,EAAAC,EACA,iBAAkBpD,EAClB,UAAWqD,EACX,SAAAN,EACA,eAAAO,EACA,MAAA9C,EACA,SAAUyC,EACV,SAAU,CACR,UAAAb,EACA,SAAAC,CACF,CACF,CAAC,EAUD,GATAc,EAAIQ,GAAwBR,EAC5BC,EAAIQ,GAAwBR,EAC5BE,EAAiB,CACf,GAAGA,EACH,CAACG,CAAI,EAAG,CACN,GAAGH,EAAeG,CAAI,EACtB,GAAGI,CACL,CACF,EACIC,GAASP,GAAc,GAAI,CAC7BA,IACI,OAAOO,GAAU,WACfA,EAAM,YACRT,EAAoBS,EAAM,WAExBA,EAAM,QACRtD,EAAQsD,EAAM,QAAU,GAAO,MAAMb,EAAU,gBAAgB,CAC7D,UAAAb,EACA,SAAAC,EACA,SAAAU,CACF,CAAC,EAAIe,EAAM,OAEZ,CACC,EAAAX,EACA,EAAAC,CACF,EAAIlB,GAA2B1B,EAAO6C,EAAmB5C,CAAG,GAE9D+C,EAAI,GACJ,QACF,CACF,CACA,MAAO,CACL,EAAAL,EACA,EAAAC,EACA,UAAWC,EACX,SAAAN,EACA,eAAAO,CACF,CACF,EACA,eAAeS,GAAeC,EAAOC,EAAS,CAC5C,IAAIC,EACAD,IAAY,SACdA,EAAU,CAAC,GAEb,GAAM,CACJ,EAAAd,EACA,EAAAC,EACA,SAAUH,EACV,MAAAzC,EACA,SAAA2D,EACA,SAAApB,CACF,EAAIiB,EACE,CACJ,SAAAI,EAAW,oBACX,aAAAC,EAAe,WACf,eAAAC,EAAiB,WACjB,YAAAC,EAAc,GACd,QAAAzC,EAAU,CACZ,EAAIjC,GAASoE,EAASD,CAAK,EACrBQ,EAAgBzC,GAAiBD,CAAO,EAExC2C,EAAUN,EAASI,EADND,IAAmB,WAAa,YAAc,WACbA,CAAc,EAC5DI,EAAqB1C,GAAiB,MAAMiB,EAAU,gBAAgB,CAC1E,SAAWiB,EAAwB,MAAOjB,EAAU,WAAa,KAAO,OAASA,EAAU,UAAUwB,CAAO,KAAO,MAAOP,EAAgCO,EAAUA,EAAQ,gBAAkB,MAAOxB,EAAU,oBAAsB,KAAO,OAASA,EAAU,mBAAmBkB,EAAS,QAAQ,GACnS,SAAAC,EACA,aAAAC,EACA,SAAAtB,CACF,CAAC,CAAC,EACId,EAAOqC,IAAmB,WAAa,CAC3C,GAAG9D,EAAM,SACT,EAAA2C,EACA,EAAAC,CACF,EAAI5C,EAAM,UACJmE,EAAe,MAAO1B,EAAU,iBAAmB,KAAO,OAASA,EAAU,gBAAgBkB,EAAS,QAAQ,GAC9GS,EAAc,MAAO3B,EAAU,WAAa,KAAO,OAASA,EAAU,UAAU0B,CAAY,GAAK,MAAO1B,EAAU,UAAY,KAAO,OAASA,EAAU,SAAS0B,CAAY,IAAM,CACvL,EAAG,EACH,EAAG,CACL,EAAI,CACF,EAAG,EACH,EAAG,CACL,EACME,EAAoB7C,GAAiBiB,EAAU,sDAAwD,MAAMA,EAAU,sDAAsD,CACjL,KAAAhB,EACA,aAAA0C,EACA,SAAA5B,CACF,CAAC,EAAId,CAAI,EACT,MAAO,CACL,KAAMyC,EAAmB,IAAMG,EAAkB,IAAML,EAAc,KAAOI,EAAY,EACxF,QAASC,EAAkB,OAASH,EAAmB,OAASF,EAAc,QAAUI,EAAY,EACpG,MAAOF,EAAmB,KAAOG,EAAkB,KAAOL,EAAc,MAAQI,EAAY,EAC5F,OAAQC,EAAkB,MAAQH,EAAmB,MAAQF,EAAc,OAASI,EAAY,CAClG,CACF,CACA,IAAIE,GAAO,SAASb,EAAS,CAC3B,OAAIA,IAAY,SACdA,EAAU,CAAC,GAEN,CACL,KAAM,OACN,QAAAA,EACA,MAAM,GAAGD,EAAO,CACd,IAAIe,EAAuBC,EAC3B,GAAM,CACJ,UAAAhF,EACA,eAAAsD,EACA,MAAA9C,EACA,iBAAAyE,EACA,SAAUhC,EACV,SAAAkB,CACF,EAAIH,EACE,CACJ,SAAUkB,EAAgB,GAC1B,UAAWC,EAAiB,GAC5B,mBAAoBC,EACpB,iBAAAC,EAAmB,UACnB,0BAAAC,EAA4B,OAC5B,cAAA5D,EAAgB,GAChB,GAAG6D,CACL,EAAI1F,GAASoE,EAASD,CAAK,EAC3B,IAAKe,EAAwBzB,EAAe,QAAU,MAAQyB,EAAsB,gBAClF,MAAO,CAAC,EAEV,IAAM5D,EAAOpB,GAAQC,CAAS,EACxBwF,EAAkBzF,GAAQkF,CAAgB,IAAMA,EAChDxE,EAAM,MAAOwC,EAAU,OAAS,KAAO,OAASA,EAAU,MAAMkB,EAAS,QAAQ,GACjFsB,EAAqBL,IAAgCI,GAAmB,CAAC9D,EAAgB,CAACZ,GAAqBmE,CAAgB,CAAC,EAAIlE,GAAsBkE,CAAgB,GAC5K,CAACG,GAA+BE,IAA8B,QAChEG,EAAmB,KAAK,GAAGhE,GAA0BwD,EAAkBvD,EAAe4D,EAA2B7E,CAAG,CAAC,EAEvH,IAAMiF,EAAc,CAACT,EAAkB,GAAGQ,CAAkB,EACtDE,EAAW,MAAM5B,GAAeC,EAAOuB,CAAqB,EAC5DK,EAAY,CAAC,EACfC,IAAkBb,EAAuB1B,EAAe,OAAS,KAAO,OAAS0B,EAAqB,YAAc,CAAC,EAIzH,GAHIE,GACFU,EAAU,KAAKD,EAASxE,CAAI,CAAC,EAE3BgE,EAAgB,CAClB,IAAMW,EAASvF,GAAkBP,EAAWQ,EAAOC,CAAG,EACtDmF,EAAU,KAAKD,EAASG,EAAO,CAAC,CAAC,EAAGH,EAASG,EAAO,CAAC,CAAC,CAAC,CACzD,CAKA,GAJAD,EAAgB,CAAC,GAAGA,EAAe,CACjC,UAAA7F,EACA,UAAA4F,CACF,CAAC,EACG,CAACA,EAAU,MAAOG,GAAUA,GAAS,CAAC,EAAG,CAC3C,IAAIC,EAAuBC,EAC3B,IAAMC,KAAeF,EAAwB1C,EAAe,OAAS,KAAO,OAAS0C,EAAsB,QAAU,GAAK,EACpHG,GAAgBT,EAAYQ,CAAS,EAC3C,GAAIC,GACF,MAAO,CACL,KAAM,CACJ,MAAOD,EACP,UAAWL,CACb,EACA,MAAO,CACL,UAAWM,EACb,CACF,EAEF,IAAIC,IAAkBH,EAAwBJ,EAAc,OAAQQ,GAAMA,EAAE,UAAU,CAAC,GAAK,CAAC,EAAE,KAAK,CAACC,EAAGC,IAAMD,EAAE,UAAU,CAAC,EAAIC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,IAAM,KAAO,OAASN,EAAsB,UAC5L,GAAI,CAACG,GACH,OAAQf,EAAkB,CACxB,IAAK,UAAW,CACd,IAAImB,EACJ,IAAMC,GAAcD,EAAwBX,EAAc,IAAKQ,GAAM,CAACA,EAAE,UAAWA,EAAE,UAAU,OAAQK,GAAcA,EAAY,CAAC,EAAE,OAAO,CAACC,EAAKD,IAAcC,EAAMD,EAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAACJ,EAAGC,IAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAM,KAAO,OAASC,EAAsB,CAAC,EAC3PC,IACFL,GAAiBK,GAEnB,KACF,CACA,IAAK,mBACHL,GAAiBnB,EACjB,KACJ,CAEF,GAAIjF,IAAcoG,GAChB,MAAO,CACL,MAAO,CACL,UAAWA,EACb,CACF,CAEJ,CACA,MAAO,CAAC,CACV,CACF,CACF,EACA,eAAeQ,GAAqB5C,EAAOC,EAAS,CAClD,GAAM,CACJ,UAAAjE,EACA,SAAUiD,EACV,SAAAkB,CACF,EAAIH,EACEvD,EAAM,MAAOwC,EAAU,OAAS,KAAO,OAASA,EAAU,MAAMkB,EAAS,QAAQ,GACjFhD,EAAOpB,GAAQC,CAAS,EACxBU,EAAYT,GAAaD,CAAS,EAClCwC,EAAanC,GAAYL,CAAS,IAAM,IACxC6G,EAAgB,CAAC,OAAQ,KAAK,EAAE,SAAS1F,CAAI,EAAI,GAAK,EACtD2F,EAAiBrG,GAAO+B,EAAa,GAAK,EAC1CuE,EAAWlH,GAASoE,EAASD,CAAK,EACpC,CACF,SAAAgD,EACA,UAAAC,EACA,cAAAtG,CACF,EAAI,OAAOoG,GAAa,SAAW,CACjC,SAAUA,EACV,UAAW,EACX,cAAe,IACjB,EAAI,CACF,SAAU,EACV,UAAW,EACX,cAAe,KACf,GAAGA,CACL,EACA,OAAIrG,GAAa,OAAOC,GAAkB,WACxCsG,EAAYvG,IAAc,MAAQC,EAAgB,GAAKA,GAElD6B,EAAa,CAClB,EAAGyE,EAAYH,EACf,EAAGE,EAAWH,CAChB,EAAI,CACF,EAAGG,EAAWH,EACd,EAAGI,EAAYH,CACjB,CACF,CACA,IAAII,GAAS,SAASjD,EAAS,CAC7B,OAAIA,IAAY,SACdA,EAAU,GAEL,CACL,KAAM,SACN,QAAAA,EACA,MAAM,GAAGD,EAAO,CACd,GAAM,CACJ,EAAAb,EACA,EAAAC,CACF,EAAIY,EACEmD,EAAa,MAAMP,GAAqB5C,EAAOC,CAAO,EAC5D,MAAO,CACL,EAAGd,EAAIgE,EAAW,EAClB,EAAG/D,EAAI+D,EAAW,EAClB,KAAMA,CACR,CACF,CACF,CACF,EACIC,GAAQ,SAASnD,EAAS,CAC5B,OAAIA,IAAY,SACdA,EAAU,CAAC,GAEN,CACL,KAAM,QACN,QAAAA,EACA,MAAM,GAAGD,EAAO,CACd,GAAM,CACJ,EAAAb,EACA,EAAAC,EACA,UAAApD,CACF,EAAIgE,EACE,CACJ,SAAUkB,EAAgB,GAC1B,UAAWC,EAAiB,GAC5B,QAAAkC,EAAU,CACR,GAAKlF,GAAS,CACZ,GAAI,CACF,EAAGmF,EACH,EAAGC,CACL,EAAIpF,EACJ,MAAO,CACL,EAAGmF,EACH,EAAGC,CACL,CACF,CACF,EACA,GAAGhC,CACL,EAAI1F,GAASoE,EAASD,CAAK,EACrBpB,EAAS,CACb,EAAAO,EACA,EAAAC,CACF,EACMuC,EAAW,MAAM5B,GAAeC,EAAOuB,CAAqB,EAC5D0B,EAAY5G,GAAYN,GAAQC,CAAS,CAAC,EAC1CgH,EAAW9G,GAAgB+G,CAAS,EACtCO,EAAgB5E,EAAOoE,CAAQ,EAC/BS,EAAiB7E,EAAOqE,CAAS,EACrC,GAAI/B,EAAe,CACjB,IAAMwC,EAAUV,IAAa,IAAM,MAAQ,OACrCW,EAAUX,IAAa,IAAM,SAAW,QACxCY,EAAOJ,EAAgB7B,EAAS+B,CAAO,EACvCG,EAAOL,EAAgB7B,EAASgC,CAAO,EAC7CH,EAAgB/H,GAAMmI,EAAMJ,EAAeK,CAAI,CACjD,CACA,GAAI1C,EAAgB,CAClB,IAAMuC,EAAUT,IAAc,IAAM,MAAQ,OACtCU,EAAUV,IAAc,IAAM,SAAW,QACzCW,EAAOH,EAAiB9B,EAAS+B,CAAO,EACxCG,EAAOJ,EAAiB9B,EAASgC,CAAO,EAC9CF,EAAiBhI,GAAMmI,EAAMH,EAAgBI,CAAI,CACnD,CACA,IAAMC,EAAgBT,EAAQ,GAAG,CAC/B,GAAGrD,EACH,CAACgD,CAAQ,EAAGQ,EACZ,CAACP,CAAS,EAAGQ,CACf,CAAC,EACD,MAAO,CACL,GAAGK,EACH,KAAM,CACJ,EAAGA,EAAc,EAAI3E,EACrB,EAAG2E,EAAc,EAAI1E,CACvB,CACF,CACF,CACF,CACF,EAGA,SAAS2E,GAAYC,EAAM,CACzB,OAAIC,GAAOD,CAAI,GACLA,EAAK,UAAY,IAAI,YAAY,EAEpC,WACT,CACA,SAASE,GAAUF,EAAM,CACvB,IAAIG,EACJ,OAAQH,GAAQ,OAAiBG,EAAsBH,EAAK,gBAAkB,KAAvD,OAAuEG,EAAoB,cAAgB,MACpI,CACA,SAASC,GAAmBJ,EAAM,CAChC,IAAI7F,EACJ,OAAQA,GAAQ8F,GAAOD,CAAI,EAAIA,EAAK,cAAgBA,EAAK,WAAa,OAAO,WAAa,KAAO,OAAS7F,EAAK,eACjH,CACA,SAAS8F,GAAOtI,EAAO,CACrB,OAAOA,aAAiB,MAAQA,aAAiBuI,GAAUvI,CAAK,EAAE,IACpE,CACA,SAAS0I,GAAU1I,EAAO,CACxB,OAAOA,aAAiB,SAAWA,aAAiBuI,GAAUvI,CAAK,EAAE,OACvE,CACA,SAAS2I,GAAc3I,EAAO,CAC5B,OAAOA,aAAiB,aAAeA,aAAiBuI,GAAUvI,CAAK,EAAE,WAC3E,CACA,SAAS4I,GAAa5I,EAAO,CAC3B,OAAI,OAAO,WAAe,IACjB,GAEFA,aAAiB,YAAcA,aAAiBuI,GAAUvI,CAAK,EAAE,UAC1E,CACA,SAAS6I,GAAkB/D,EAAS,CAClC,GAAM,CACJ,SAAAkB,EACA,UAAA8C,EACA,UAAAC,EACA,QAAAC,CACF,EAAIC,GAAiBnE,CAAO,EAC5B,MAAO,kCAAkC,KAAKkB,EAAW+C,EAAYD,CAAS,GAAK,CAAC,CAAC,SAAU,UAAU,EAAE,SAASE,CAAO,CAC7H,CACA,SAASE,GAAepE,EAAS,CAC/B,MAAO,CAAC,QAAS,KAAM,IAAI,EAAE,SAASsD,GAAYtD,CAAO,CAAC,CAC5D,CACA,SAASqE,GAAkBrE,EAAS,CAClC,IAAMsE,EAASC,GAAS,EAClBC,EAAML,GAAiBnE,CAAO,EACpC,OAAOwE,EAAI,YAAc,QAAUA,EAAI,cAAgB,SAAWA,EAAI,cAAgBA,EAAI,gBAAkB,SAAW,KAAU,CAACF,IAAWE,EAAI,eAAiBA,EAAI,iBAAmB,OAAS,KAAU,CAACF,IAAWE,EAAI,OAASA,EAAI,SAAW,OAAS,KAAU,CAAC,YAAa,cAAe,QAAQ,EAAE,KAAMtJ,IAAWsJ,EAAI,YAAc,IAAI,SAAStJ,CAAK,CAAC,GAAK,CAAC,QAAS,SAAU,SAAU,SAAS,EAAE,KAAMA,IAAWsJ,EAAI,SAAW,IAAI,SAAStJ,CAAK,CAAC,CACvc,CACA,SAASuJ,GAAmBzE,EAAS,CACnC,IAAI0E,EAAcC,GAAc3E,CAAO,EACvC,KAAO6D,GAAca,CAAW,GAAK,CAACE,GAAsBF,CAAW,GAAG,CACxE,GAAIL,GAAkBK,CAAW,EAC/B,OAAOA,EAEPA,EAAcC,GAAcD,CAAW,CAE3C,CACA,OAAO,IACT,CACA,SAASH,IAAW,CAClB,OAAI,OAAO,IAAQ,KAAe,CAAC,IAAI,SAC9B,GACF,IAAI,SAAS,0BAA2B,MAAM,CACvD,CACA,SAASK,GAAsBrB,EAAM,CACnC,MAAO,CAAC,OAAQ,OAAQ,WAAW,EAAE,SAASD,GAAYC,CAAI,CAAC,CACjE,CACA,SAASY,GAAiBnE,EAAS,CACjC,OAAOyD,GAAUzD,CAAO,EAAE,iBAAiBA,CAAO,CACpD,CACA,SAAS6E,GAAc7E,EAAS,CAC9B,OAAI4D,GAAU5D,CAAO,EACZ,CACL,WAAYA,EAAQ,WACpB,UAAWA,EAAQ,SACrB,EAEK,CACL,WAAYA,EAAQ,YACpB,UAAWA,EAAQ,WACrB,CACF,CACA,SAAS2E,GAAcpB,EAAM,CAC3B,GAAID,GAAYC,CAAI,IAAM,OACxB,OAAOA,EAET,IAAMuB,EAEJvB,EAAK,cACLA,EAAK,YACLO,GAAaP,CAAI,GAAKA,EAAK,MAC3BI,GAAmBJ,CAAI,EAEzB,OAAOO,GAAagB,CAAM,EAAIA,EAAO,KAAOA,CAC9C,CACA,SAASC,GAA2BxB,EAAM,CACxC,IAAMyB,EAAaL,GAAcpB,CAAI,EACrC,OAAIqB,GAAsBI,CAAU,EAC3BzB,EAAK,cAAgBA,EAAK,cAAc,KAAOA,EAAK,KAEzDM,GAAcmB,CAAU,GAAKjB,GAAkBiB,CAAU,EACpDA,EAEFD,GAA2BC,CAAU,CAC9C,CACA,SAASC,GAAqB1B,EAAMpG,EAAM+H,EAAiB,CACzD,IAAIC,EACAhI,IAAS,SACXA,EAAO,CAAC,GAEN+H,IAAoB,SACtBA,EAAkB,IAEpB,IAAME,EAAqBL,GAA2BxB,CAAI,EACpD8B,EAASD,MAAyBD,EAAuB5B,EAAK,gBAAkB,KAAO,OAAS4B,EAAqB,MACrHG,EAAM7B,GAAU2B,CAAkB,EACxC,OAAIC,EACKlI,EAAK,OAAOmI,EAAKA,EAAI,gBAAkB,CAAC,EAAGvB,GAAkBqB,CAAkB,EAAIA,EAAqB,CAAC,EAAGE,EAAI,cAAgBJ,EAAkBD,GAAqBK,EAAI,YAAY,EAAI,CAAC,CAAC,EAE/LnI,EAAK,OAAOiI,EAAoBH,GAAqBG,EAAoB,CAAC,EAAGF,CAAe,CAAC,CACtG,CAGA,SAASK,GAAiBvF,EAAS,CACjC,IAAMwE,EAAML,GAAiBnE,CAAO,EAChCwF,EAAQ,WAAWhB,EAAI,KAAK,GAAK,EACjCiB,EAAS,WAAWjB,EAAI,MAAM,GAAK,EACjCkB,EAAY7B,GAAc7D,CAAO,EACjC2F,EAAcD,EAAY1F,EAAQ,YAAcwF,EAChDI,EAAeF,EAAY1F,EAAQ,aAAeyF,EAClDI,EAAiBnL,GAAM8K,CAAK,IAAMG,GAAejL,GAAM+K,CAAM,IAAMG,EACzE,OAAIC,IACFL,EAAQG,EACRF,EAASG,GAEJ,CACL,MAAAJ,EACA,OAAAC,EACA,EAAGI,CACL,CACF,CACA,SAASC,GAAc9F,EAAS,CAC9B,OAAQ4D,GAAU5D,CAAO,EAA6BA,EAAzBA,EAAQ,cACvC,CACA,SAAS+F,GAAS/F,EAAS,CACzB,IAAMgG,EAAaF,GAAc9F,CAAO,EACxC,GAAI,CAAC6D,GAAcmC,CAAU,EAC3B,OAAOpL,GAAa,CAAC,EAEvB,IAAM4C,EAAOwI,EAAW,sBAAsB,EACxC,CACJ,MAAAR,EACA,OAAAC,EACA,EAAAQ,CACF,EAAIV,GAAiBS,CAAU,EAC3BtH,GAAKuH,EAAIvL,GAAM8C,EAAK,KAAK,EAAIA,EAAK,OAASgI,EAC3C7G,GAAKsH,EAAIvL,GAAM8C,EAAK,MAAM,EAAIA,EAAK,QAAUiI,EACjD,OAAI,CAAC/G,GAAK,CAAC,OAAO,SAASA,CAAC,KAC1BA,EAAI,IAEF,CAACC,GAAK,CAAC,OAAO,SAASA,CAAC,KAC1BA,EAAI,GAEC,CACL,EAAAD,EACA,EAAAC,CACF,CACF,CACA,IAAIuH,GAA4BtL,GAAa,CAAC,EAC9C,SAASuL,GAAiBnG,EAAS,CACjC,IAAMsF,EAAM7B,GAAUzD,CAAO,EAC7B,MAAI,CAACuE,GAAS,GAAK,CAACe,EAAI,eACfY,GAEF,CACL,EAAGZ,EAAI,eAAe,WACtB,EAAGA,EAAI,eAAe,SACxB,CACF,CACA,SAASc,GAAuBpG,EAASqG,EAASC,EAAsB,CAItE,OAHID,IAAY,SACdA,EAAU,IAER,CAACC,GAAwBD,GAAWC,IAAyB7C,GAAUzD,CAAO,EACzE,GAEFqG,CACT,CACA,SAASE,GAAsBvG,EAASwG,EAAcC,EAAiBvG,EAAc,CAC/EsG,IAAiB,SACnBA,EAAe,IAEbC,IAAoB,SACtBA,EAAkB,IAEpB,IAAMC,EAAa1G,EAAQ,sBAAsB,EAC3CgG,EAAaF,GAAc9F,CAAO,EACpC2G,EAAQ/L,GAAa,CAAC,EACtB4L,IACEtG,EACE0D,GAAU1D,CAAY,IACxByG,EAAQZ,GAAS7F,CAAY,GAG/ByG,EAAQZ,GAAS/F,CAAO,GAG5B,IAAM4G,EAAgBR,GAAuBJ,EAAYS,EAAiBvG,CAAY,EAAIiG,GAAiBH,CAAU,EAAIpL,GAAa,CAAC,EACnI8D,GAAKgI,EAAW,KAAOE,EAAc,GAAKD,EAAM,EAChDhI,GAAK+H,EAAW,IAAME,EAAc,GAAKD,EAAM,EAC/CnB,EAAQkB,EAAW,MAAQC,EAAM,EACjClB,EAASiB,EAAW,OAASC,EAAM,EACvC,GAAIX,EAAY,CACd,IAAMV,EAAM7B,GAAUuC,CAAU,EAC1Ba,EAAY3G,GAAgB0D,GAAU1D,CAAY,EAAIuD,GAAUvD,CAAY,EAAIA,EAClF4G,EAAgBxB,EAAI,aACxB,KAAOwB,GAAiB5G,GAAgB2G,IAAcvB,GAAK,CACzD,IAAMyB,EAAchB,GAASe,CAAa,EACpCE,EAAaF,EAAc,sBAAsB,EACjDtC,EAAML,GAAiB2C,CAAa,EACpCG,EAAOD,EAAW,MAAQF,EAAc,WAAa,WAAWtC,EAAI,WAAW,GAAKuC,EAAY,EAChGG,EAAMF,EAAW,KAAOF,EAAc,UAAY,WAAWtC,EAAI,UAAU,GAAKuC,EAAY,EAClGrI,GAAKqI,EAAY,EACjBpI,GAAKoI,EAAY,EACjBvB,GAASuB,EAAY,EACrBtB,GAAUsB,EAAY,EACtBrI,GAAKuI,EACLtI,GAAKuI,EACLJ,EAAgBrD,GAAUqD,CAAa,EAAE,YAC3C,CACF,CACA,OAAOvJ,GAAiB,CACtB,MAAAiI,EACA,OAAAC,EACA,EAAA/G,EACA,EAAAC,CACF,CAAC,CACH,CACA,SAASwI,GAAsDzJ,EAAM,CACnE,GAAI,CACF,KAAAF,EACA,aAAA0C,EACA,SAAA5B,CACF,EAAIZ,EACE0J,EAA0BvD,GAAc3D,CAAY,EACpDmH,EAAkB1D,GAAmBzD,CAAY,EACvD,GAAIA,IAAiBmH,EACnB,OAAO7J,EAET,IAAI8J,EAAS,CACX,WAAY,EACZ,UAAW,CACb,EACIX,EAAQ/L,GAAa,CAAC,EACpB2M,EAAU3M,GAAa,CAAC,EAC9B,IAAIwM,GAA2B,CAACA,GAA2B9I,IAAa,YAClEgF,GAAYpD,CAAY,IAAM,QAAU6D,GAAkBsD,CAAe,KAC3EC,EAASzC,GAAc3E,CAAY,GAEjC2D,GAAc3D,CAAY,GAAG,CAC/B,IAAMsH,EAAajB,GAAsBrG,CAAY,EACrDyG,EAAQZ,GAAS7F,CAAY,EAC7BqH,EAAQ,EAAIC,EAAW,EAAItH,EAAa,WACxCqH,EAAQ,EAAIC,EAAW,EAAItH,EAAa,SAC1C,CAEF,MAAO,CACL,MAAO1C,EAAK,MAAQmJ,EAAM,EAC1B,OAAQnJ,EAAK,OAASmJ,EAAM,EAC5B,EAAGnJ,EAAK,EAAImJ,EAAM,EAAIW,EAAO,WAAaX,EAAM,EAAIY,EAAQ,EAC5D,EAAG/J,EAAK,EAAImJ,EAAM,EAAIW,EAAO,UAAYX,EAAM,EAAIY,EAAQ,CAC7D,CACF,CACA,SAASE,GAAezH,EAAS,CAC/B,OAAO,MAAM,KAAKA,EAAQ,eAAe,CAAC,CAC5C,CACA,SAAS0H,GAAoB1H,EAAS,CACpC,OAAOuG,GAAsB5C,GAAmB3D,CAAO,CAAC,EAAE,KAAO6E,GAAc7E,CAAO,EAAE,UAC1F,CACA,SAAS2H,GAAgB3H,EAAS,CAChC,IAAM4H,EAAOjE,GAAmB3D,CAAO,EACjCsH,EAASzC,GAAc7E,CAAO,EAC9B6H,EAAO7H,EAAQ,cAAc,KAC7BwF,EAAQ/K,GAAImN,EAAK,YAAaA,EAAK,YAAaC,EAAK,YAAaA,EAAK,WAAW,EAClFpC,EAAShL,GAAImN,EAAK,aAAcA,EAAK,aAAcC,EAAK,aAAcA,EAAK,YAAY,EACzFnJ,EAAI,CAAC4I,EAAO,WAAaI,GAAoB1H,CAAO,EAClDrB,EAAI,CAAC2I,EAAO,UAClB,OAAInD,GAAiB0D,CAAI,EAAE,YAAc,QACvCnJ,GAAKjE,GAAImN,EAAK,YAAaC,EAAK,WAAW,EAAIrC,GAE1C,CACL,MAAAA,EACA,OAAAC,EACA,EAAA/G,EACA,EAAAC,CACF,CACF,CACA,SAASmJ,GAAgB9H,EAAS1B,EAAU,CAC1C,IAAMgH,EAAM7B,GAAUzD,CAAO,EACvB4H,EAAOjE,GAAmB3D,CAAO,EACjC+H,EAAiBzC,EAAI,eACvBE,EAAQoC,EAAK,YACbnC,EAASmC,EAAK,aACdlJ,EAAI,EACJC,EAAI,EACR,GAAIoJ,EAAgB,CAClBvC,EAAQuC,EAAe,MACvBtC,EAASsC,EAAe,OACxB,IAAMC,EAAsBzD,GAAS,GACjC,CAACyD,GAAuBA,GAAuB1J,IAAa,WAC9DI,EAAIqJ,EAAe,WACnBpJ,EAAIoJ,EAAe,UAEvB,CACA,MAAO,CACL,MAAAvC,EACA,OAAAC,EACA,EAAA/G,EACA,EAAAC,CACF,CACF,CACA,SAASsJ,GAA2BjI,EAAS1B,EAAU,CACrD,IAAMoI,EAAaH,GAAsBvG,EAAS,GAAM1B,IAAa,OAAO,EACtE4I,EAAMR,EAAW,IAAM1G,EAAQ,UAC/BiH,EAAOP,EAAW,KAAO1G,EAAQ,WACjC2G,EAAQ9C,GAAc7D,CAAO,EAAI+F,GAAS/F,CAAO,EAAIpF,GAAa,CAAC,EACnE4K,EAAQxF,EAAQ,YAAc2G,EAAM,EACpClB,EAASzF,EAAQ,aAAe2G,EAAM,EACtCjI,EAAIuI,EAAON,EAAM,EACjBhI,EAAIuI,EAAMP,EAAM,EACtB,MAAO,CACL,MAAAnB,EACA,OAAAC,EACA,EAAA/G,EACA,EAAAC,CACF,CACF,CACA,SAASuJ,GAAkClI,EAASmI,EAAkB7J,EAAU,CAC9E,IAAId,EACJ,GAAI2K,IAAqB,WACvB3K,EAAOsK,GAAgB9H,EAAS1B,CAAQ,UAC/B6J,IAAqB,WAC9B3K,EAAOmK,GAAgBhE,GAAmB3D,CAAO,CAAC,UACzC4D,GAAUuE,CAAgB,EACnC3K,EAAOyK,GAA2BE,EAAkB7J,CAAQ,MACvD,CACL,IAAMsI,EAAgBT,GAAiBnG,CAAO,EAC9CxC,EAAO,CACL,GAAG2K,EACH,EAAGA,EAAiB,EAAIvB,EAAc,EACtC,EAAGuB,EAAiB,EAAIvB,EAAc,CACxC,CACF,CACA,OAAOrJ,GAAiBC,CAAI,CAC9B,CACA,SAAS4K,GAAyBpI,EAASqI,EAAU,CACnD,IAAMrD,EAAaL,GAAc3E,CAAO,EACxC,OAAIgF,IAAeqD,GAAY,CAACzE,GAAUoB,CAAU,GAAKJ,GAAsBI,CAAU,EAChF,GAEFb,GAAiBa,CAAU,EAAE,WAAa,SAAWoD,GAAyBpD,EAAYqD,CAAQ,CAC3G,CACA,SAASC,GAA4BtI,EAASuI,EAAO,CACnD,IAAMC,EAAeD,EAAM,IAAIvI,CAAO,EACtC,GAAIwI,EACF,OAAOA,EAET,IAAI1D,EAASG,GAAqBjF,EAAS,CAAC,EAAG,EAAK,EAAE,OAAQyI,GAAO7E,GAAU6E,CAAE,GAAKnF,GAAYmF,CAAE,IAAM,MAAM,EAC5GC,EAAsC,KACpCC,EAAiBxE,GAAiBnE,CAAO,EAAE,WAAa,QAC1D0E,EAAciE,EAAiBhE,GAAc3E,CAAO,EAAIA,EAC5D,KAAO4D,GAAUc,CAAW,GAAK,CAACE,GAAsBF,CAAW,GAAG,CACpE,IAAMkE,EAAgBzE,GAAiBO,CAAW,EAC5CmE,EAA0BxE,GAAkBK,CAAW,EACzD,CAACmE,GAA2BD,EAAc,WAAa,UACzDF,EAAsC,OAEVC,EAAiB,CAACE,GAA2B,CAACH,EAAsC,CAACG,GAA2BD,EAAc,WAAa,UAAY,CAAC,CAACF,GAAuC,CAAC,WAAY,OAAO,EAAE,SAASA,EAAoC,QAAQ,GAAK3E,GAAkBW,CAAW,GAAK,CAACmE,GAA2BT,GAAyBpI,EAAS0E,CAAW,GAEvZI,EAASA,EAAO,OAAQgE,GAAaA,IAAapE,CAAW,EAE7DgE,EAAsCE,EAExClE,EAAcC,GAAcD,CAAW,CACzC,CACA,OAAA6D,EAAM,IAAIvI,EAAS8E,CAAM,EAClBA,CACT,CACA,SAASiE,GAAgBrL,EAAM,CAC7B,GAAI,CACF,QAAAsC,EACA,SAAAL,EACA,aAAAC,EACA,SAAAtB,CACF,EAAIZ,EAEEsL,EAAoB,CAAC,GADMrJ,IAAa,oBAAsB2I,GAA4BtI,EAAS,KAAK,EAAE,EAAI,CAAC,EAAE,OAAOL,CAAQ,EAC9EC,CAAY,EAC9DqJ,EAAwBD,EAAkB,CAAC,EAC3CE,EAAeF,EAAkB,OAAO,CAACG,EAAShB,IAAqB,CAC3E,IAAM3K,EAAO0K,GAAkClI,EAASmI,EAAkB7J,CAAQ,EAClF,OAAA6K,EAAQ,IAAM1O,GAAI+C,EAAK,IAAK2L,EAAQ,GAAG,EACvCA,EAAQ,MAAQ3O,GAAIgD,EAAK,MAAO2L,EAAQ,KAAK,EAC7CA,EAAQ,OAAS3O,GAAIgD,EAAK,OAAQ2L,EAAQ,MAAM,EAChDA,EAAQ,KAAO1O,GAAI+C,EAAK,KAAM2L,EAAQ,IAAI,EACnCA,CACT,EAAGjB,GAAkClI,EAASiJ,EAAuB3K,CAAQ,CAAC,EAC9E,MAAO,CACL,MAAO4K,EAAa,MAAQA,EAAa,KACzC,OAAQA,EAAa,OAASA,EAAa,IAC3C,EAAGA,EAAa,KAChB,EAAGA,EAAa,GAClB,CACF,CACA,SAASE,GAAcpJ,EAAS,CAC9B,OAAOuF,GAAiBvF,CAAO,CACjC,CACA,SAASqJ,GAA8BrJ,EAASE,EAAc5B,EAAU,CACtE,IAAM8I,EAA0BvD,GAAc3D,CAAY,EACpDmH,EAAkB1D,GAAmBzD,CAAY,EACjDmG,EAAU/H,IAAa,QACvBd,EAAO+I,GAAsBvG,EAAS,GAAMqG,EAASnG,CAAY,EACnEoH,EAAS,CACX,WAAY,EACZ,UAAW,CACb,EACMC,EAAU3M,GAAa,CAAC,EAC9B,GAAIwM,GAA2B,CAACA,GAA2B,CAACf,EAI1D,IAHI/C,GAAYpD,CAAY,IAAM,QAAU6D,GAAkBsD,CAAe,KAC3EC,EAASzC,GAAc3E,CAAY,GAEjCkH,EAAyB,CAC3B,IAAMI,EAAajB,GAAsBrG,EAAc,GAAMmG,EAASnG,CAAY,EAClFqH,EAAQ,EAAIC,EAAW,EAAItH,EAAa,WACxCqH,EAAQ,EAAIC,EAAW,EAAItH,EAAa,SAC1C,MAAWmH,IACTE,EAAQ,EAAIG,GAAoBL,CAAe,GAGnD,MAAO,CACL,EAAG7J,EAAK,KAAO8J,EAAO,WAAaC,EAAQ,EAC3C,EAAG/J,EAAK,IAAM8J,EAAO,UAAYC,EAAQ,EACzC,MAAO/J,EAAK,MACZ,OAAQA,EAAK,MACf,CACF,CACA,SAAS8L,GAAoBtJ,EAASuJ,EAAU,CAC9C,MAAI,CAAC1F,GAAc7D,CAAO,GAAKmE,GAAiBnE,CAAO,EAAE,WAAa,QAC7D,KAELuJ,EACKA,EAASvJ,CAAO,EAElBA,EAAQ,YACjB,CACA,SAASwJ,GAAgBxJ,EAASuJ,EAAU,CAC1C,IAAME,EAAUhG,GAAUzD,CAAO,EACjC,GAAI,CAAC6D,GAAc7D,CAAO,EACxB,OAAOyJ,EAET,IAAIvJ,EAAeoJ,GAAoBtJ,EAASuJ,CAAQ,EACxD,KAAOrJ,GAAgBkE,GAAelE,CAAY,GAAKiE,GAAiBjE,CAAY,EAAE,WAAa,UACjGA,EAAeoJ,GAAoBpJ,EAAcqJ,CAAQ,EAE3D,OAAIrJ,IAAiBoD,GAAYpD,CAAY,IAAM,QAAUoD,GAAYpD,CAAY,IAAM,QAAUiE,GAAiBjE,CAAY,EAAE,WAAa,UAAY,CAACmE,GAAkBnE,CAAY,GACnLuJ,EAEFvJ,GAAgBuE,GAAmBzE,CAAO,GAAKyJ,CACxD,CACA,IAAIC,GAAkB,eAAehM,EAAM,CACzC,GAAI,CACF,UAAAC,EACA,SAAAC,EACA,SAAAU,CACF,EAAIZ,EACEiM,EAAoB,KAAK,iBAAmBH,GAC5CI,EAAkB,KAAK,cAC7B,MAAO,CACL,UAAWP,GAA8B1L,EAAW,MAAMgM,EAAkB/L,CAAQ,EAAGU,CAAQ,EAC/F,SAAU,CACR,EAAG,EACH,EAAG,EACH,GAAG,MAAMsL,EAAgBhM,CAAQ,CACnC,CACF,CACF,EACA,SAASiM,GAAM7J,EAAS,CACtB,OAAOmE,GAAiBnE,CAAO,EAAE,YAAc,KACjD,CACA,IAAI8J,GAAW,CACb,sDAAA3C,GACA,mBAAAxD,GACA,gBAAAoF,GACA,gBAAAS,GACA,gBAAAE,GACA,eAAAjC,GACA,cAAA2B,GACA,SAAArD,GACA,UAAAnC,GACA,MAAAiG,EACF,EACA,SAASE,GAAY/J,EAASgK,EAAQ,CACpC,IAAIC,EAAK,KACLC,EACEC,EAAOxG,GAAmB3D,CAAO,EACvC,SAASoK,GAAU,CACjB,aAAaF,CAAS,EACtBD,GAAMA,EAAG,WAAW,EACpBA,EAAK,IACP,CACA,SAASI,EAAQC,EAAMC,EAAW,CAC5BD,IAAS,SACXA,EAAO,IAELC,IAAc,SAChBA,EAAY,GAEdH,EAAQ,EACR,GAAM,CACJ,KAAAnD,EACA,IAAAC,EACA,MAAA1B,EACA,OAAAC,CACF,EAAIzF,EAAQ,sBAAsB,EAIlC,GAHKsK,GACHN,EAAO,EAEL,CAACxE,GAAS,CAACC,EACb,OAEF,IAAM+E,EAAW7P,GAAMuM,CAAG,EACpBuD,EAAa9P,GAAMwP,EAAK,aAAelD,EAAOzB,EAAM,EACpDkF,EAAc/P,GAAMwP,EAAK,cAAgBjD,EAAMzB,EAAO,EACtDkF,EAAYhQ,GAAMsM,CAAI,EAEtBzH,EAAU,CACd,WAFiB,CAACgL,EAAW,MAAQ,CAACC,EAAa,MAAQ,CAACC,EAAc,MAAQ,CAACC,EAAY,KAG/F,UAAWlQ,GAAI,EAAGD,GAAI,EAAG+P,CAAS,CAAC,GAAK,CAC1C,EACIK,EAAgB,GACpB,SAASC,EAAcC,EAAS,CAC9B,IAAMC,EAAQD,EAAQ,CAAC,EAAE,kBACzB,GAAIC,IAAUR,EAAW,CACvB,GAAI,CAACK,EACH,OAAOP,EAAQ,EAEZU,EAKHV,EAAQ,GAAOU,CAAK,EAJpBb,EAAY,WAAW,IAAM,CAC3BG,EAAQ,GAAO,IAAI,CACrB,EAAG,GAAG,CAIV,CACAO,EAAgB,EAClB,CACA,GAAI,CACFX,EAAK,IAAI,qBAAqBY,EAAe,CAC3C,GAAGrL,EAEH,KAAM2K,EAAK,aACb,CAAC,CACH,MAAY,CACVF,EAAK,IAAI,qBAAqBY,EAAerL,CAAO,CACtD,CACAyK,EAAG,QAAQjK,CAAO,CACpB,CACA,OAAAqK,EAAQ,EAAI,EACLD,CACT,CACA,SAASY,GAAWrN,EAAWC,EAAUqN,EAAQzL,EAAS,CACpDA,IAAY,SACdA,EAAU,CAAC,GAEb,GAAM,CACJ,eAAA0L,EAAiB,GACjB,eAAAC,EAAiB,GACjB,cAAAC,EAAgB,OAAO,gBAAmB,WAC1C,YAAAC,EAAc,OAAO,sBAAyB,WAC9C,eAAAC,EAAiB,EACnB,EAAI9L,EACE+L,EAAczF,GAAcnI,CAAS,EACrC6N,EAAYN,GAAkBC,EAAiB,CAAC,GAAGI,EAActG,GAAqBsG,CAAW,EAAI,CAAC,EAAG,GAAGtG,GAAqBrH,CAAQ,CAAC,EAAI,CAAC,EACrJ4N,EAAU,QAAS1C,GAAa,CAC9BoC,GAAkBpC,EAAS,iBAAiB,SAAUmC,EAAQ,CAC5D,QAAS,EACX,CAAC,EACDE,GAAkBrC,EAAS,iBAAiB,SAAUmC,CAAM,CAC9D,CAAC,EACD,IAAMQ,EAAYF,GAAeF,EAActB,GAAYwB,EAAaN,CAAM,EAAI,KAC9ES,EAAiB,GACjBC,EAAiB,KACjBP,IACFO,EAAiB,IAAI,eAAgBjO,GAAS,CAC5C,GAAI,CAACkO,CAAU,EAAIlO,EACfkO,GAAcA,EAAW,SAAWL,GAAeI,IACrDA,EAAe,UAAU/N,CAAQ,EACjC,qBAAqB8N,CAAc,EACnCA,EAAiB,sBAAsB,IAAM,CAC3CC,GAAkBA,EAAe,QAAQ/N,CAAQ,CACnD,CAAC,GAEHqN,EAAO,CACT,CAAC,EACGM,GAAe,CAACD,GAClBK,EAAe,QAAQJ,CAAW,EAEpCI,EAAe,QAAQ/N,CAAQ,GAEjC,IAAIiO,EACAC,EAAcR,EAAiB/E,GAAsB5I,CAAS,EAAI,KAClE2N,GACFS,EAAU,EAEZ,SAASA,GAAY,CACnB,IAAMC,EAAczF,GAAsB5I,CAAS,EAC/CmO,IAAgBE,EAAY,IAAMF,EAAY,GAAKE,EAAY,IAAMF,EAAY,GAAKE,EAAY,QAAUF,EAAY,OAASE,EAAY,SAAWF,EAAY,SACtKb,EAAO,EAETa,EAAcE,EACdH,EAAU,sBAAsBE,CAAS,CAC3C,CACA,OAAAd,EAAO,EACA,IAAM,CACXO,EAAU,QAAS1C,GAAa,CAC9BoC,GAAkBpC,EAAS,oBAAoB,SAAUmC,CAAM,EAC/DE,GAAkBrC,EAAS,oBAAoB,SAAUmC,CAAM,CACjE,CAAC,EACDQ,GAAaA,EAAU,EACvBE,GAAkBA,EAAe,WAAW,EAC5CA,EAAiB,KACbL,GACF,qBAAqBO,CAAO,CAEhC,CACF,CACA,IAAII,GAAmB,CAACtO,EAAWC,EAAU4B,IAAY,CACvD,IAAM+I,EAAwB,IAAI,IAC5B2D,EAAgB,CACpB,SAAApC,GACA,GAAGtK,CACL,EACM2M,EAAoB,CACxB,GAAGD,EAAc,SACjB,GAAI3D,CACN,EACA,OAAOnK,GAAgBT,EAAWC,EAAU,CAC1C,GAAGsO,EACH,SAAUC,CACZ,CAAC,CACH,EAGA,SAASC,GAAYC,EAAQ,CAC3BA,EAAO,MAAM,SAAW5D,GAAO,CAC7B,GAAI,CAACA,EAAG,UACN,KAAM,kEACR,OAAOA,EAAG,SACZ,CAAC,EACD4D,EAAO,eAAe,CAACC,EAAMC,IAAO,CAC9BD,GAAQA,EAAK,WAAa,CAACC,EAAG,YAChCA,EAAG,UAAYD,EAAK,UAExB,CAAC,EACDD,EAAO,UAAU,SAAUA,EAAO,gBAChC,CAAC5D,EAAI,CAAE,WAAA+D,EAAY,UAAAC,EAAW,MAAAvR,CAAM,EAAG,CAAE,QAAAkP,EAAS,SAAUsC,CAAU,IAAM,CAC1E,GAAI,CAAE,UAAAnR,EAAW,YAAAoR,EAAa,SAAAC,CAAS,EAAIC,GAAWJ,CAAS,EAC/DhE,EAAG,UAAY4D,EAAO,SAAS,CAAE,EAAG,EAAG,EAAG,CAAE,CAAC,EAC7C,IAAI1O,EAAY+O,EAAUF,CAAU,EACpC,GAAI,CAAC7O,EACH,KAAM,6CACR,IAAImP,EAAU,IAAM,CAClB,IAAIC,EACJd,GAAiBtO,EAAW8K,EAAI,CAC9B,UAAAlN,EACA,WAAY,CAAC8E,GAAK,EAAGsC,GAAM,CAAE,QAAS,CAAE,CAAC,EAAGF,GAAOkK,CAAW,CAAC,CACjE,CAAC,EAAE,KAAK,CAAC,CAAE,EAAAjO,EAAG,EAAAC,CAAE,IAAM,CACpBiO,GAAYI,GAAUvE,EAAI/J,EAAGC,CAAC,EAC1B,KAAK,UAAU,CAAE,EAAAD,EAAG,EAAAC,CAAE,CAAC,IAAMoO,IAC/BtE,EAAG,UAAU,EAAI/J,EACjB+J,EAAG,UAAU,EAAI9J,GAEnBoO,EAAgB,KAAK,UAAU,CAAE,EAAArO,EAAG,EAAAC,CAAE,CAAC,CACzC,CAAC,CACH,EACIsO,EAAUjC,GAAWrN,EAAW8K,EAAI,IAAMqE,EAAQ,CAAC,EACvD1C,EAAQ,IAAM6C,EAAQ,CAAC,CACzB,EAEA,CAACxE,EAAI,CAAE,WAAA+D,EAAY,UAAAC,EAAW,MAAAvR,CAAM,EAAG,CAAE,QAAAkP,EAAS,SAAUsC,CAAU,IAAM,CAC1E,GAAI,CAAE,UAAAnR,EAAW,YAAAoR,EAAa,SAAAC,CAAS,EAAIC,GAAWJ,CAAS,EAC3DhE,EAAG,YACLmE,GAAYI,GAAUvE,EAAIA,EAAG,UAAU,EAAGA,EAAG,UAAU,CAAC,EAE5D,CACF,CAAC,CACH,CACA,SAASuE,GAAUvE,EAAI/J,EAAGC,EAAG,CAC3B,OAAO,OAAO8J,EAAG,MAAO,CACtB,KAAM/J,EAAI,KACV,IAAKC,EAAI,KACT,SAAU,UACZ,CAAC,CACH,CACA,SAASkO,GAAWJ,EAAW,CAE7B,IAAIlR,EADY,CAAC,MAAO,YAAa,UAAW,QAAS,cAAe,YAAa,SAAU,eAAgB,aAAc,OAAQ,aAAc,UAAU,EACnI,KAAMwD,GAAM0N,EAAU,SAAS1N,CAAC,CAAC,EACvD4N,EAAc,EAClB,GAAIF,EAAU,SAAS,QAAQ,EAAG,CAChC,IAAIS,EAAMT,EAAU,UAAW1N,GAAMA,IAAM,QAAQ,EACnD4N,EAAcF,EAAUS,EAAM,CAAC,IAAM,OAAS,OAAOT,EAAUS,EAAM,CAAC,CAAC,EAAIP,CAC7E,CACA,IAAIC,EAAWH,EAAU,SAAS,UAAU,EAC5C,MAAO,CAAE,UAAAlR,EAAW,YAAAoR,EAAa,SAAAC,CAAS,CAC5C,CAGA,IAAIO,GAAiBf,GCpuCrB,IAAIgB,GAAe,GACfC,GAAW,GACXC,GAAQ,CAAC,EACTC,GAAmB,GACvB,SAASC,GAAUC,EAAU,CAC3BC,GAASD,CAAQ,CACnB,CACA,SAASC,GAASC,EAAK,CAChBL,GAAM,SAASK,CAAG,GACrBL,GAAM,KAAKK,CAAG,EAChBC,GAAW,CACb,CACA,SAASC,GAAWF,EAAK,CACvB,IAAIG,EAAQR,GAAM,QAAQK,CAAG,EACzBG,IAAU,IAAMA,EAAQP,IAC1BD,GAAM,OAAOQ,EAAO,CAAC,CACzB,CACA,SAASF,IAAa,CAChB,CAACP,IAAY,CAACD,KAChBA,GAAe,GACf,eAAeW,EAAS,EAE5B,CACA,SAASA,IAAY,CACnBX,GAAe,GACfC,GAAW,GACX,QAASW,EAAI,EAAGA,EAAIV,GAAM,OAAQU,IAChCV,GAAMU,CAAC,EAAE,EACTT,GAAmBS,EAErBV,GAAM,OAAS,EACfC,GAAmB,GACnBF,GAAW,EACb,CAGA,IAAIY,GACAC,GACAC,GACAC,GACAC,GAAiB,GACrB,SAASC,GAAwBb,EAAU,CACzCY,GAAiB,GACjBZ,EAAS,EACTY,GAAiB,EACnB,CACA,SAASE,GAAoBC,EAAQ,CACnCP,GAAWO,EAAO,SAClBL,GAAUK,EAAO,QACjBN,GAAUT,GAAae,EAAO,OAAOf,EAAU,CAAE,UAAYgB,GAAS,CAChEJ,GACFb,GAAUiB,CAAI,EAEdA,EAAK,CAET,CAAE,CAAC,EACHL,GAAMI,EAAO,GACf,CACA,SAASE,GAAeC,EAAU,CAChCT,GAASS,CACX,CACA,SAASC,GAAmBC,EAAI,CAC9B,IAAIC,EAAW,IAAM,CACrB,EAkBA,MAAO,CAjBcrB,GAAa,CAChC,IAAIsB,EAAkBb,GAAOT,CAAQ,EACrC,OAAKoB,EAAG,aACNA,EAAG,WAA6B,IAAI,IACpCA,EAAG,cAAgB,IAAM,CACvBA,EAAG,WAAW,QAASb,GAAMA,EAAE,CAAC,CAClC,GAEFa,EAAG,WAAW,IAAIE,CAAe,EACjCD,EAAW,IAAM,CACXC,IAAoB,SAExBF,EAAG,WAAW,OAAOE,CAAe,EACpCZ,GAAQY,CAAe,EACzB,EACOA,CACT,EACuB,IAAM,CAC3BD,EAAS,CACX,CAAC,CACH,CACA,SAASE,GAAMC,EAAQxB,EAAU,CAC/B,IAAIyB,EAAY,GACZC,EACAJ,EAAkBb,GAAO,IAAM,CACjC,IAAIkB,EAAQH,EAAO,EACnB,KAAK,UAAUG,CAAK,EACfF,EAMHC,EAAWC,EALX,eAAe,IAAM,CACnB3B,EAAS2B,EAAOD,CAAQ,EACxBA,EAAWC,CACb,CAAC,EAIHF,EAAY,EACd,CAAC,EACD,MAAO,IAAMf,GAAQY,CAAe,CACtC,CAGA,IAAIM,GAAoB,CAAC,EACrBC,GAAe,CAAC,EAChBC,GAAa,CAAC,EAClB,SAASC,GAAU/B,EAAU,CAC3B8B,GAAW,KAAK9B,CAAQ,CAC1B,CACA,SAASgC,GAAYZ,EAAIpB,EAAU,CAC7B,OAAOA,GAAa,YACjBoB,EAAG,cACNA,EAAG,YAAc,CAAC,GACpBA,EAAG,YAAY,KAAKpB,CAAQ,IAE5BA,EAAWoB,EACXS,GAAa,KAAK7B,CAAQ,EAE9B,CACA,SAASiC,GAAkBjC,EAAU,CACnC4B,GAAkB,KAAK5B,CAAQ,CACjC,CACA,SAASkC,GAAmBd,EAAIe,EAAMnC,EAAU,CACzCoB,EAAG,uBACNA,EAAG,qBAAuB,CAAC,GACxBA,EAAG,qBAAqBe,CAAI,IAC/Bf,EAAG,qBAAqBe,CAAI,EAAI,CAAC,GACnCf,EAAG,qBAAqBe,CAAI,EAAE,KAAKnC,CAAQ,CAC7C,CACA,SAASoC,GAAkBhB,EAAIiB,EAAO,CAC/BjB,EAAG,sBAER,OAAO,QAAQA,EAAG,oBAAoB,EAAE,QAAQ,CAAC,CAACe,EAAMR,CAAK,IAAM,EAC7DU,IAAU,QAAUA,EAAM,SAASF,CAAI,KACzCR,EAAM,QAASpB,GAAMA,EAAE,CAAC,EACxB,OAAOa,EAAG,qBAAqBe,CAAI,EAEvC,CAAC,CACH,CACA,SAASG,GAAelB,EAAI,CAE1B,IADAA,EAAG,YAAY,QAAQhB,EAAU,EAC1BgB,EAAG,aAAa,QACrBA,EAAG,YAAY,IAAI,EAAE,CACzB,CACA,IAAImB,GAAW,IAAI,iBAAiBC,EAAQ,EACxCC,GAAqB,GACzB,SAASC,IAA0B,CACjCH,GAAS,QAAQ,SAAU,CAAE,QAAS,GAAM,UAAW,GAAM,WAAY,GAAM,kBAAmB,EAAK,CAAC,EACxGE,GAAqB,EACvB,CACA,SAASE,IAAyB,CAChCC,GAAc,EACdL,GAAS,WAAW,EACpBE,GAAqB,EACvB,CACA,IAAII,GAAkB,CAAC,EACvB,SAASD,IAAgB,CACvB,IAAIE,EAAUP,GAAS,YAAY,EACnCM,GAAgB,KAAK,IAAMC,EAAQ,OAAS,GAAKN,GAASM,CAAO,CAAC,EAClE,IAAIC,EAA2BF,GAAgB,OAC/C,eAAe,IAAM,CACnB,GAAIA,GAAgB,SAAWE,EAC7B,KAAOF,GAAgB,OAAS,GAC9BA,GAAgB,MAAM,EAAE,CAE9B,CAAC,CACH,CACA,SAASG,GAAUhD,EAAU,CAC3B,GAAI,CAACyC,GACH,OAAOzC,EAAS,EAClB2C,GAAuB,EACvB,IAAIM,EAASjD,EAAS,EACtB,OAAA0C,GAAwB,EACjBO,CACT,CACA,IAAIC,GAAe,GACfC,GAAoB,CAAC,EACzB,SAASC,IAAiB,CACxBF,GAAe,EACjB,CACA,SAASG,IAAiC,CACxCH,GAAe,GACfV,GAASW,EAAiB,EAC1BA,GAAoB,CAAC,CACvB,CACA,SAASX,GAASc,EAAW,CAC3B,GAAIJ,GAAc,CAChBC,GAAoBA,GAAkB,OAAOG,CAAS,EACtD,MACF,CACA,IAAIC,EAAa,CAAC,EACdC,EAA+B,IAAI,IACnCC,EAAkC,IAAI,IACtCC,EAAoC,IAAI,IAC5C,QAASnD,EAAI,EAAGA,EAAI+C,EAAU,OAAQ/C,IACpC,GAAI,CAAA+C,EAAU/C,CAAC,EAAE,OAAO,4BAEpB+C,EAAU/C,CAAC,EAAE,OAAS,cACxB+C,EAAU/C,CAAC,EAAE,aAAa,QAASoD,GAAS,CACtCA,EAAK,WAAa,GAEjBA,EAAK,WAEVH,EAAa,IAAIG,CAAI,CACvB,CAAC,EACDL,EAAU/C,CAAC,EAAE,WAAW,QAASoD,GAAS,CACxC,GAAIA,EAAK,WAAa,EAEtB,IAAIH,EAAa,IAAIG,CAAI,EAAG,CAC1BH,EAAa,OAAOG,CAAI,EACxB,MACF,CACIA,EAAK,WAETJ,EAAW,KAAKI,CAAI,EACtB,CAAC,GAECL,EAAU/C,CAAC,EAAE,OAAS,cAAc,CACtC,IAAIa,EAAKkC,EAAU/C,CAAC,EAAE,OAClB4B,EAAOmB,EAAU/C,CAAC,EAAE,cACpBmB,EAAW4B,EAAU/C,CAAC,EAAE,SACxBqD,EAAO,IAAM,CACVH,EAAgB,IAAIrC,CAAE,GACzBqC,EAAgB,IAAIrC,EAAI,CAAC,CAAC,EAC5BqC,EAAgB,IAAIrC,CAAE,EAAE,KAAK,CAAE,KAAAe,EAAM,MAAOf,EAAG,aAAae,CAAI,CAAE,CAAC,CACrE,EACI0B,EAAS,IAAM,CACZH,EAAkB,IAAItC,CAAE,GAC3BsC,EAAkB,IAAItC,EAAI,CAAC,CAAC,EAC9BsC,EAAkB,IAAItC,CAAE,EAAE,KAAKe,CAAI,CACrC,EACIf,EAAG,aAAae,CAAI,GAAKT,IAAa,KACxCkC,EAAK,EACIxC,EAAG,aAAae,CAAI,GAC7B0B,EAAO,EACPD,EAAK,GAELC,EAAO,CAEX,CAEFH,EAAkB,QAAQ,CAACI,EAAO1C,IAAO,CACvCgB,GAAkBhB,EAAI0C,CAAK,CAC7B,CAAC,EACDL,EAAgB,QAAQ,CAACK,EAAO1C,IAAO,CACrCQ,GAAkB,QAASrB,GAAMA,EAAEa,EAAI0C,CAAK,CAAC,CAC/C,CAAC,EACD,QAASH,KAAQH,EACXD,EAAW,KAAMhD,GAAMA,EAAE,SAASoD,CAAI,CAAC,GAE3C9B,GAAa,QAAStB,GAAMA,EAAEoD,CAAI,CAAC,EAErC,QAASA,KAAQJ,EACVI,EAAK,aAEV7B,GAAW,QAASvB,GAAMA,EAAEoD,CAAI,CAAC,EAEnCJ,EAAa,KACbC,EAAe,KACfC,EAAkB,KAClBC,EAAoB,IACtB,CAGA,SAASK,GAAMJ,EAAM,CACnB,OAAOK,GAAaC,GAAiBN,CAAI,CAAC,CAC5C,CACA,SAASO,GAAeP,EAAMQ,EAAOC,EAAe,CAClD,OAAAT,EAAK,aAAe,CAACQ,EAAO,GAAGF,GAAiBG,GAAiBT,CAAI,CAAC,EAC/D,IAAM,CACXA,EAAK,aAAeA,EAAK,aAAa,OAAQ,GAAM,IAAMQ,CAAK,CACjE,CACF,CACA,SAASF,GAAiBN,EAAM,CAC9B,OAAIA,EAAK,aACAA,EAAK,aACV,OAAO,YAAe,YAAcA,aAAgB,WAC/CM,GAAiBN,EAAK,IAAI,EAE9BA,EAAK,WAGHM,GAAiBN,EAAK,UAAU,EAF9B,CAAC,CAGZ,CACA,SAASK,GAAaK,EAAS,CAC7B,OAAO,IAAI,MAAM,CAAE,QAAAA,CAAQ,EAAGC,EAAc,CAC9C,CACA,IAAIA,GAAiB,CACnB,QAAQ,CAAE,QAAAD,CAAQ,EAAG,CACnB,OAAO,MAAM,KACX,IAAI,IAAIA,EAAQ,QAAS9D,GAAM,OAAO,KAAKA,CAAC,CAAC,CAAC,CAChD,CACF,EACA,IAAI,CAAE,QAAA8D,CAAQ,EAAGlC,EAAM,CACrB,OAAIA,GAAQ,OAAO,YACV,GACFkC,EAAQ,KACZE,GAAQ,OAAO,UAAU,eAAe,KAAKA,EAAKpC,CAAI,GAAK,QAAQ,IAAIoC,EAAKpC,CAAI,CACnF,CACF,EACA,IAAI,CAAE,QAAAkC,CAAQ,EAAGlC,EAAMqC,EAAW,CAChC,OAAIrC,GAAQ,SACHsC,GACF,QAAQ,IACbJ,EAAQ,KACLE,GAAQ,QAAQ,IAAIA,EAAKpC,CAAI,CAChC,GAAK,CAAC,EACNA,EACAqC,CACF,CACF,EACA,IAAI,CAAE,QAAAH,CAAQ,EAAGlC,EAAMR,EAAO6C,EAAW,CACvC,IAAME,EAASL,EAAQ,KACpBE,GAAQ,OAAO,UAAU,eAAe,KAAKA,EAAKpC,CAAI,CACzD,GAAKkC,EAAQA,EAAQ,OAAS,CAAC,EACzBM,EAAa,OAAO,yBAAyBD,EAAQvC,CAAI,EAC/D,OAAIwC,GAAY,KAAOA,GAAY,IAC1BA,EAAW,IAAI,KAAKH,EAAW7C,CAAK,GAAK,GAC3C,QAAQ,IAAI+C,EAAQvC,EAAMR,CAAK,CACxC,CACF,EACA,SAAS8C,IAAkB,CAEzB,OADW,QAAQ,QAAQ,IAAI,EACnB,OAAO,CAACG,EAAKC,KACvBD,EAAIC,CAAG,EAAI,QAAQ,IAAI,KAAMA,CAAG,EACzBD,GACN,CAAC,CAAC,CACP,CAGA,SAASE,GAAiBX,EAAO,CAC/B,IAAIY,EAAaC,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAG,GAAKA,IAAQ,KAC/EC,EAAU,CAACV,EAAKW,EAAW,KAAO,CACpC,OAAO,QAAQ,OAAO,0BAA0BX,CAAG,CAAC,EAAE,QAAQ,CAAC,CAACM,EAAK,CAAE,MAAAlD,EAAO,WAAAwD,CAAW,CAAC,IAAM,CAG9F,GAFIA,IAAe,IAASxD,IAAU,QAElC,OAAOA,GAAU,UAAYA,IAAU,MAAQA,EAAM,SACvD,OACF,IAAIyD,EAAOF,IAAa,GAAKL,EAAM,GAAGK,CAAQ,IAAIL,CAAG,GACjD,OAAOlD,GAAU,UAAYA,IAAU,MAAQA,EAAM,eACvD4C,EAAIM,CAAG,EAAIlD,EAAM,WAAWwC,EAAOiB,EAAMP,CAAG,EAExCE,EAAUpD,CAAK,GAAKA,IAAU4C,GAAO,EAAE5C,aAAiB,UAC1DsD,EAAQtD,EAAOyD,CAAI,CAGzB,CAAC,CACH,EACA,OAAOH,EAAQd,CAAK,CACtB,CACA,SAASkB,GAAYrF,EAAUsF,EAAY,IAAM,CACjD,EAAG,CACD,IAAIf,EAAM,CACR,aAAc,OACd,eAAgB,GAChB,WAAWJ,EAAOiB,EAAMP,EAAK,CAC3B,OAAO7E,EAAS,KAAK,aAAc,IAAMuF,GAAIpB,EAAOiB,CAAI,EAAIzD,GAAU6D,GAAIrB,EAAOiB,EAAMzD,CAAK,EAAGyD,EAAMP,CAAG,CAC1G,CACF,EACA,OAAAS,EAAUf,CAAG,EACLkB,GAAiB,CACvB,GAAI,OAAOA,GAAiB,UAAYA,IAAiB,MAAQA,EAAa,eAAgB,CAC5F,IAAIC,EAAanB,EAAI,WAAW,KAAKA,CAAG,EACxCA,EAAI,WAAa,CAACJ,EAAOiB,EAAMP,IAAQ,CACrC,IAAIc,EAAaF,EAAa,WAAWtB,EAAOiB,EAAMP,CAAG,EACzD,OAAAN,EAAI,aAAeoB,EACZD,EAAWvB,EAAOiB,EAAMP,CAAG,CACpC,CACF,MACEN,EAAI,aAAekB,EAErB,OAAOlB,CACT,CACF,CACA,SAASgB,GAAIhB,EAAKa,EAAM,CACtB,OAAOA,EAAK,MAAM,GAAG,EAAE,OAAO,CAACQ,EAAOC,IAAYD,EAAMC,CAAO,EAAGtB,CAAG,CACvE,CACA,SAASiB,GAAIjB,EAAKa,EAAMzD,EAAO,CAG7B,GAFI,OAAOyD,GAAS,WAClBA,EAAOA,EAAK,MAAM,GAAG,GACnBA,EAAK,SAAW,EAClBb,EAAIa,EAAK,CAAC,CAAC,EAAIzD,MACZ,IAAIyD,EAAK,SAAW,EACvB,MAAM,MAEN,OAAIb,EAAIa,EAAK,CAAC,CAAC,IAGbb,EAAIa,EAAK,CAAC,CAAC,EAAI,CAAC,GACTI,GAAIjB,EAAIa,EAAK,CAAC,CAAC,EAAGA,EAAK,MAAM,CAAC,EAAGzD,CAAK,EAGnD,CAGA,IAAImE,GAAS,CAAC,EACd,SAASC,GAAM5D,EAAMnC,EAAU,CAC7B8F,GAAO3D,CAAI,EAAInC,CACjB,CACA,SAASgG,GAAazB,EAAKnD,EAAI,CAC7B,IAAI6E,EAAoBC,GAAa9E,CAAE,EACvC,cAAO,QAAQ0E,EAAM,EAAE,QAAQ,CAAC,CAAC3D,EAAMnC,CAAQ,IAAM,CACnD,OAAO,eAAeuE,EAAK,IAAIpC,CAAI,GAAI,CACrC,KAAM,CACJ,OAAOnC,EAASoB,EAAI6E,CAAiB,CACvC,EACA,WAAY,EACd,CAAC,CACH,CAAC,EACM1B,CACT,CACA,SAAS2B,GAAa9E,EAAI,CACxB,GAAI,CAAC+E,EAAW9E,CAAQ,EAAI+E,GAAyBhF,CAAE,EACnDiF,EAAQ,CAAE,YAAAhB,GAAa,GAAGc,CAAU,EACxC,OAAAnE,GAAYZ,EAAIC,CAAQ,EACjBgF,CACT,CAGA,SAASC,GAASlF,EAAImF,EAAYvG,KAAawG,EAAM,CACnD,GAAI,CACF,OAAOxG,EAAS,GAAGwG,CAAI,CACzB,OAASC,EAAG,CACVC,GAAYD,EAAGrF,EAAImF,CAAU,CAC/B,CACF,CACA,SAASG,GAAYC,EAAQvF,EAAImF,EAAa,OAAQ,CACpDI,EAAS,OAAO,OACdA,GAAU,CAAE,QAAS,yBAA0B,EAC/C,CAAE,GAAAvF,EAAI,WAAAmF,CAAW,CACnB,EACA,QAAQ,KAAK,4BAA4BI,EAAO,OAAO;AAAA;AAAA,EAEvDJ,EAAa,gBAAkBA,EAAa;AAAA;AAAA,EAAU,EAAE,GAAInF,CAAE,EAC9D,WAAW,IAAM,CACf,MAAMuF,CACR,EAAG,CAAC,CACN,CAGA,IAAIC,GAA8B,GAClC,SAASC,GAA0B7G,EAAU,CAC3C,IAAI8G,EAAQF,GACZA,GAA8B,GAC9B,IAAI3D,EAASjD,EAAS,EACtB,OAAA4G,GAA8BE,EACvB7D,CACT,CACA,SAAS8D,GAAS3F,EAAImF,EAAYS,EAAS,CAAC,EAAG,CAC7C,IAAI/D,EACJ,OAAAgE,GAAc7F,EAAImF,CAAU,EAAG5E,GAAUsB,EAAStB,EAAOqF,CAAM,EACxD/D,CACT,CACA,SAASgE,MAAiBT,EAAM,CAC9B,OAAOU,GAAqB,GAAGV,CAAI,CACrC,CACA,IAAIU,GAAuBC,GAC3B,SAASC,GAAaC,EAAc,CAClCH,GAAuBG,CACzB,CACA,SAASF,GAAgB/F,EAAImF,EAAY,CACvC,IAAIe,EAAmB,CAAC,EACxBtB,GAAasB,EAAkBlG,CAAE,EACjC,IAAImG,EAAY,CAACD,EAAkB,GAAGrD,GAAiB7C,CAAE,CAAC,EACtDoG,EAAY,OAAOjB,GAAe,WAAakB,GAA8BF,EAAWhB,CAAU,EAAImB,GAA4BH,EAAWhB,EAAYnF,CAAE,EAC/J,OAAOkF,GAAS,KAAK,KAAMlF,EAAImF,EAAYiB,CAAS,CACtD,CACA,SAASC,GAA8BF,EAAWI,EAAM,CACtD,MAAO,CAACC,EAAW,IAAM,CACzB,EAAG,CAAE,MAAOC,EAAS,CAAC,EAAG,OAAAC,EAAS,CAAC,EAAG,QAAAC,CAAQ,EAAI,CAAC,IAAM,CACvD,IAAI9E,EAAS0E,EAAK,MAAM3D,GAAa,CAAC6D,EAAQ,GAAGN,CAAS,CAAC,EAAGO,CAAM,EACpEE,GAAoBJ,EAAU3E,CAAM,CACtC,CACF,CACA,IAAIgF,GAAgB,CAAC,EACrB,SAASC,GAA2B3B,EAAYnF,EAAI,CAClD,GAAI6G,GAAc1B,CAAU,EAC1B,OAAO0B,GAAc1B,CAAU,EAEjC,IAAI4B,EAAgB,OAAO,eAAe,gBAAiB,CAC3D,CAAC,EAAE,YACCC,EAA0B,qBAAqB,KAAK7B,EAAW,KAAK,CAAC,GAAK,iBAAiB,KAAKA,EAAW,KAAK,CAAC,EAAI,eAAeA,CAAU,QAAUA,EAgBxJoB,GAfsB,IAAM,CAC9B,GAAI,CACF,IAAIU,EAAQ,IAAIF,EACd,CAAC,SAAU,OAAO,EAClB,kCAAkCC,CAAuB,mDAC3D,EACA,cAAO,eAAeC,EAAO,OAAQ,CACnC,MAAO,YAAY9B,CAAU,EAC/B,CAAC,EACM8B,CACT,OAAS1B,EAAQ,CACf,OAAAD,GAAYC,EAAQvF,EAAImF,CAAU,EAC3B,QAAQ,QAAQ,CACzB,CACF,GAC6B,EAC7B,OAAA0B,GAAc1B,CAAU,EAAIoB,EACrBA,CACT,CACA,SAASD,GAA4BH,EAAWhB,EAAYnF,EAAI,CAC9D,IAAIuG,EAAOO,GAA2B3B,EAAYnF,CAAE,EACpD,MAAO,CAACwG,EAAW,IAAM,CACzB,EAAG,CAAE,MAAOC,EAAS,CAAC,EAAG,OAAAC,EAAS,CAAC,EAAG,QAAAC,CAAQ,EAAI,CAAC,IAAM,CACvDJ,EAAK,OAAS,OACdA,EAAK,SAAW,GAChB,IAAIW,EAAgBtE,GAAa,CAAC6D,EAAQ,GAAGN,CAAS,CAAC,EACvD,GAAI,OAAOI,GAAS,WAAY,CAC9B,IAAIY,EAAUZ,EAAK,KAAKI,EAASJ,EAAMW,CAAa,EAAE,MAAO3B,GAAWD,GAAYC,EAAQvF,EAAImF,CAAU,CAAC,EACvGoB,EAAK,UACPK,GAAoBJ,EAAUD,EAAK,OAAQW,EAAeR,EAAQ1G,CAAE,EACpEuG,EAAK,OAAS,QAEdY,EAAQ,KAAMtF,GAAW,CACvB+E,GAAoBJ,EAAU3E,EAAQqF,EAAeR,EAAQ1G,CAAE,CACjE,CAAC,EAAE,MAAOuF,GAAWD,GAAYC,EAAQvF,EAAImF,CAAU,CAAC,EAAE,QAAQ,IAAMoB,EAAK,OAAS,MAAM,CAEhG,CACF,CACF,CACA,SAASK,GAAoBJ,EAAUjG,EAAOkG,EAAQC,EAAQ1G,EAAI,CAChE,GAAIwF,IAA+B,OAAOjF,GAAU,WAAY,CAC9D,IAAIsB,EAAStB,EAAM,MAAMkG,EAAQC,CAAM,EACnC7E,aAAkB,QACpBA,EAAO,KAAM1C,GAAMyH,GAAoBJ,EAAUrH,EAAGsH,EAAQC,CAAM,CAAC,EAAE,MAAOnB,GAAWD,GAAYC,EAAQvF,EAAIO,CAAK,CAAC,EAErHiG,EAAS3E,CAAM,CAEnB,MAAW,OAAOtB,GAAU,UAAYA,aAAiB,QACvDA,EAAM,KAAMpB,GAAMqH,EAASrH,CAAC,CAAC,EAE7BqH,EAASjG,CAAK,CAElB,CAGA,IAAI6G,GAAiB,KACrB,SAASC,GAAOC,EAAU,GAAI,CAC5B,OAAOF,GAAiBE,CAC1B,CACA,SAASC,GAAUC,EAAW,CAC5BJ,GAAiBI,CACnB,CACA,IAAIC,GAAoB,CAAC,EACzB,SAASC,GAAU3G,EAAMnC,EAAU,CACjC,OAAA6I,GAAkB1G,CAAI,EAAInC,EACnB,CACL,OAAO+I,EAAY,CACjB,GAAI,CAACF,GAAkBE,CAAU,EAAG,CAClC,QAAQ,KAAK,OAAO,8BAA8BA,CAAU,SAAS5G,CAAI,4CAA4C,EACrH,MACF,CACA,IAAM6G,EAAMC,GAAe,QAAQF,CAAU,EAC7CE,GAAe,OAAOD,GAAO,EAAIA,EAAMC,GAAe,QAAQ,SAAS,EAAG,EAAG9G,CAAI,CACnF,CACF,CACF,CACA,SAAS+G,GAAgB/G,EAAM,CAC7B,OAAO,OAAO,KAAK0G,EAAiB,EAAE,SAAS1G,CAAI,CACrD,CACA,SAASgH,GAAW/H,EAAIgI,EAAYC,EAA2B,CAE7D,GADAD,EAAa,MAAM,KAAKA,CAAU,EAC9BhI,EAAG,qBAAsB,CAC3B,IAAIkI,EAAc,OAAO,QAAQlI,EAAG,oBAAoB,EAAE,IAAI,CAAC,CAACe,EAAMR,CAAK,KAAO,CAAE,KAAAQ,EAAM,MAAAR,CAAM,EAAE,EAC9F4H,EAAmBC,GAAeF,CAAW,EACjDA,EAAcA,EAAY,IAAKG,GACzBF,EAAiB,KAAMG,GAASA,EAAK,OAASD,EAAU,IAAI,EACvD,CACL,KAAM,UAAUA,EAAU,IAAI,GAC9B,MAAO,IAAIA,EAAU,KAAK,GAC5B,EAEKA,CACR,EACDL,EAAaA,EAAW,OAAOE,CAAW,CAC5C,CACA,IAAIK,EAA0B,CAAC,EAE/B,OADkBP,EAAW,IAAIQ,GAAwB,CAACC,EAASC,IAAYH,EAAwBE,CAAO,EAAIC,CAAO,CAAC,EAAE,OAAOC,EAAsB,EAAE,IAAIC,GAAmBL,EAAyBN,CAAyB,CAAC,EAAE,KAAKY,EAAU,EACnO,IAAKlB,GACfmB,GAAoB9I,EAAI2H,CAAU,CAC1C,CACH,CACA,SAASS,GAAeJ,EAAY,CAClC,OAAO,MAAM,KAAKA,CAAU,EAAE,IAAIQ,GAAwB,CAAC,EAAE,OAAQF,GAAS,CAACK,GAAuBL,CAAI,CAAC,CAC7G,CACA,IAAIS,GAAsB,GACtBC,GAAyC,IAAI,IAC7CC,GAAyB,OAAO,EACpC,SAASC,GAAwBtK,EAAU,CACzCmK,GAAsB,GACtB,IAAItF,EAAM,OAAO,EACjBwF,GAAyBxF,EACzBuF,GAAuB,IAAIvF,EAAK,CAAC,CAAC,EAClC,IAAI0F,EAAgB,IAAM,CACxB,KAAOH,GAAuB,IAAIvF,CAAG,EAAE,QACrCuF,GAAuB,IAAIvF,CAAG,EAAE,MAAM,EAAE,EAC1CuF,GAAuB,OAAOvF,CAAG,CACnC,EACI2F,EAAgB,IAAM,CACxBL,GAAsB,GACtBI,EAAc,CAChB,EACAvK,EAASuK,CAAa,EACtBC,EAAc,CAChB,CACA,SAASpE,GAAyBhF,EAAI,CACpC,IAAIqJ,EAAW,CAAC,EACZpJ,EAAYrB,GAAayK,EAAS,KAAKzK,CAAQ,EAC/C,CAAC0K,EAASC,CAAa,EAAIxJ,GAAmBC,CAAE,EACpD,OAAAqJ,EAAS,KAAKE,CAAa,EASpB,CARS,CACd,OAAQC,GACR,OAAQF,EACR,QAASrJ,EACT,cAAe4F,GAAc,KAAKA,GAAe7F,CAAE,EACnD,SAAU2F,GAAS,KAAKA,GAAU3F,CAAE,CACtC,EACgB,IAAMqJ,EAAS,QAASlK,GAAMA,EAAE,CAAC,CACrB,CAC9B,CACA,SAAS2J,GAAoB9I,EAAI2H,EAAY,CAC3C,IAAI8B,EAAO,IAAM,CACjB,EACIC,EAAWjC,GAAkBE,EAAW,IAAI,GAAK8B,EACjD,CAAC1E,EAAW9E,CAAQ,EAAI+E,GAAyBhF,CAAE,EACvDc,GAAmBd,EAAI2H,EAAW,SAAU1H,CAAQ,EACpD,IAAI0J,EAAc,IAAM,CAClB3J,EAAG,WAAaA,EAAG,gBAEvB0J,EAAS,QAAUA,EAAS,OAAO1J,EAAI2H,EAAY5C,CAAS,EAC5D2E,EAAWA,EAAS,KAAKA,EAAU1J,EAAI2H,EAAY5C,CAAS,EAC5DgE,GAAsBC,GAAuB,IAAIC,EAAsB,EAAE,KAAKS,CAAQ,EAAIA,EAAS,EACrG,EACA,OAAAC,EAAY,YAAc1J,EACnB0J,CACT,CACA,IAAIC,GAAe,CAACtC,EAASuC,IAAgB,CAAC,CAAE,KAAA9I,EAAM,MAAAR,CAAM,KACtDQ,EAAK,WAAWuG,CAAO,IACzBvG,EAAOA,EAAK,QAAQuG,EAASuC,CAAW,GACnC,CAAE,KAAA9I,EAAM,MAAAR,CAAM,GAEnBuJ,GAAQ3K,GAAMA,EAClB,SAASqJ,GAAwB5J,EAAW,IAAM,CAClD,EAAG,CACD,MAAO,CAAC,CAAE,KAAAmC,EAAM,MAAAR,CAAM,IAAM,CAC1B,GAAI,CAAE,KAAMkI,EAAS,MAAOsB,CAAS,EAAIC,GAAsB,OAAO,CAACxF,EAAOyF,IACrEA,EAAUzF,CAAK,EACrB,CAAE,KAAAzD,EAAM,MAAAR,CAAM,CAAC,EAClB,OAAIkI,IAAY1H,GACdnC,EAAS6J,EAAS1H,CAAI,EACjB,CAAE,KAAM0H,EAAS,MAAOsB,CAAS,CAC1C,CACF,CACA,IAAIC,GAAwB,CAAC,EAC7B,SAASE,GAActL,EAAU,CAC/BoL,GAAsB,KAAKpL,CAAQ,CACrC,CACA,SAAS+J,GAAuB,CAAE,KAAA5H,CAAK,EAAG,CACxC,OAAOoJ,GAAqB,EAAE,KAAKpJ,CAAI,CACzC,CACA,IAAIoJ,GAAuB,IAAM,IAAI,OAAO,IAAI/C,EAAc,cAAc,EAC5E,SAASwB,GAAmBL,EAAyBN,EAA2B,CAC9E,MAAO,CAAC,CAAE,KAAAlH,EAAM,MAAAR,CAAM,IAAM,CAC1B,IAAI6J,EAAYrJ,EAAK,MAAMoJ,GAAqB,CAAC,EAC7CE,EAAatJ,EAAK,MAAM,qBAAqB,EAC7CuJ,EAAYvJ,EAAK,MAAM,uBAAuB,GAAK,CAAC,EACpDwJ,EAAWtC,GAA6BM,EAAwBxH,CAAI,GAAKA,EAC7E,MAAO,CACL,KAAMqJ,EAAYA,EAAU,CAAC,EAAI,KACjC,MAAOC,EAAaA,EAAW,CAAC,EAAI,KACpC,UAAWC,EAAU,IAAKnL,GAAMA,EAAE,QAAQ,IAAK,EAAE,CAAC,EAClD,WAAYoB,EACZ,SAAAgK,CACF,CACF,CACF,CACA,IAAIC,GAAU,UACV3C,GAAiB,CACnB,SACA,MACA,OACA,KACA,SACA,OACA,OACA,MACA,QACA,YACA,aACA,OACA,KACA2C,GACA,UACF,EACA,SAAS3B,GAAW4B,EAAGC,EAAG,CACxB,IAAIC,EAAQ9C,GAAe,QAAQ4C,EAAE,IAAI,IAAM,GAAKD,GAAUC,EAAE,KAC5DG,EAAQ/C,GAAe,QAAQ6C,EAAE,IAAI,IAAM,GAAKF,GAAUE,EAAE,KAChE,OAAO7C,GAAe,QAAQ8C,CAAK,EAAI9C,GAAe,QAAQ+C,CAAK,CACrE,CAGA,SAASC,GAAS7K,EAAIe,EAAM+J,EAAS,CAAC,EAAG,CACvC9K,EAAG,cACD,IAAI,YAAYe,EAAM,CACpB,OAAA+J,EACA,QAAS,GAET,SAAU,GACV,WAAY,EACd,CAAC,CACH,CACF,CAGA,SAASC,GAAK/K,EAAIpB,EAAU,CAC1B,GAAI,OAAO,YAAe,YAAcoB,aAAc,WAAY,CAChE,MAAM,KAAKA,EAAG,QAAQ,EAAE,QAASgL,GAAQD,GAAKC,EAAKpM,CAAQ,CAAC,EAC5D,MACF,CACA,IAAIqM,EAAO,GAEX,GADArM,EAASoB,EAAI,IAAMiL,EAAO,EAAI,EAC1BA,EACF,OACF,IAAI1I,EAAOvC,EAAG,kBACd,KAAOuC,GACLwI,GAAKxI,EAAM3D,EAAU,EAAK,EAC1B2D,EAAOA,EAAK,kBAEhB,CAGA,SAAS2I,GAAKC,KAAY/F,EAAM,CAC9B,QAAQ,KAAK,mBAAmB+F,CAAO,GAAI,GAAG/F,CAAI,CACpD,CAGA,IAAIgG,GAAU,GACd,SAASC,IAAQ,CACXD,IACFF,GAAK,6GAA6G,EACpHE,GAAU,GACL,SAAS,MACZF,GAAK,qIAAqI,EAC5IL,GAAS,SAAU,aAAa,EAChCA,GAAS,SAAU,qBAAqB,EACxCvJ,GAAwB,EACxBX,GAAWX,GAAOsL,GAAStL,EAAI+K,EAAI,CAAC,EACpCnK,GAAaZ,GAAOuL,GAAYvL,CAAE,CAAC,EACnCa,GAAkB,CAACb,EAAI0C,IAAU,CAC/BqF,GAAW/H,EAAI0C,CAAK,EAAE,QAAS8I,GAAWA,EAAO,CAAC,CACpD,CAAC,EACD,IAAIC,EAAuBzL,GAAO,CAAC0L,GAAY1L,EAAG,cAAe,EAAI,EACrE,MAAM,KAAK,SAAS,iBAAiB2L,GAAa,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,OAAOF,CAAmB,EAAE,QAASzL,GAAO,CAC1GsL,GAAStL,CAAE,CACb,CAAC,EACD6K,GAAS,SAAU,oBAAoB,EACvC,WAAW,IAAM,CACfe,GAAwB,CAC1B,CAAC,CACH,CACA,IAAIC,GAAwB,CAAC,EACzBC,GAAwB,CAAC,EAC7B,SAASC,IAAgB,CACvB,OAAOF,GAAsB,IAAKG,GAAOA,EAAG,CAAC,CAC/C,CACA,SAASL,IAAe,CACtB,OAAOE,GAAsB,OAAOC,EAAqB,EAAE,IAAKE,GAAOA,EAAG,CAAC,CAC7E,CACA,SAASC,GAAgBC,EAAkB,CACzCL,GAAsB,KAAKK,CAAgB,CAC7C,CACA,SAASC,GAAgBD,EAAkB,CACzCJ,GAAsB,KAAKI,CAAgB,CAC7C,CACA,SAASR,GAAY1L,EAAIoM,EAAuB,GAAO,CACrD,OAAOC,GAAYrM,EAAKsM,GAAY,CAElC,IADkBF,EAAuBT,GAAa,EAAII,GAAc,GAC1D,KAAMQ,GAAaD,EAAQ,QAAQC,CAAQ,CAAC,EACxD,MAAO,EACX,CAAC,CACH,CACA,SAASF,GAAYrM,EAAIpB,EAAU,CACjC,GAAKoB,EAEL,IAAIpB,EAASoB,CAAE,EACb,OAAOA,EAGT,GAFIA,EAAG,kBACLA,EAAKA,EAAG,iBACN,EAACA,EAAG,cAER,OAAOqM,GAAYrM,EAAG,cAAepB,CAAQ,EAC/C,CACA,SAAS4N,GAAOxM,EAAI,CAClB,OAAO+L,GAAc,EAAE,KAAMQ,GAAavM,EAAG,QAAQuM,CAAQ,CAAC,CAChE,CACA,IAAIE,GAAoB,CAAC,EACzB,SAASC,GAAc9N,EAAU,CAC/B6N,GAAkB,KAAK7N,CAAQ,CACjC,CACA,IAAI+N,GAAkB,EACtB,SAASrB,GAAStL,EAAI4M,EAAS7B,GAAM8B,EAAY,IAAM,CACvD,EAAG,CACGR,GAAYrM,EAAK,GAAM,EAAE,SAAS,GAEtCkJ,GAAwB,IAAM,CAC5B0D,EAAO5M,EAAI,CAACgL,EAAKC,IAAS,CACpBD,EAAI,YAER6B,EAAU7B,EAAKC,CAAI,EACnBwB,GAAkB,QAAStN,GAAMA,EAAE6L,EAAKC,CAAI,CAAC,EAC7ClD,GAAWiD,EAAKA,EAAI,UAAU,EAAE,QAASQ,GAAWA,EAAO,CAAC,EACvDR,EAAI,YACPA,EAAI,UAAY2B,MAClB3B,EAAI,WAAaC,EAAK,EACxB,CAAC,CACH,CAAC,CACH,CACA,SAASM,GAAYuB,EAAMF,EAAS7B,GAAM,CACxC6B,EAAOE,EAAO9M,GAAO,CACnBkB,GAAelB,CAAE,EACjBgB,GAAkBhB,CAAE,EACpB,OAAOA,EAAG,SACZ,CAAC,CACH,CACA,SAAS4L,IAA0B,CACV,CACrB,CAAC,KAAM,SAAU,CAAC,yBAAyB,CAAC,EAC5C,CAAC,SAAU,SAAU,CAAC,YAAY,CAAC,EACnC,CAAC,OAAQ,OAAQ,CAAC,UAAU,CAAC,CAC/B,EACiB,QAAQ,CAAC,CAACmB,EAASpF,EAAYqF,CAAS,IAAM,CACzDlF,GAAgBH,CAAU,GAE9BqF,EAAU,KAAMT,GAAa,CAC3B,GAAI,SAAS,cAAcA,CAAQ,EACjC,OAAArB,GAAK,UAAUqB,CAAQ,kBAAkBQ,CAAO,SAAS,EAClD,EAEX,CAAC,CACH,CAAC,CACH,CAGA,IAAIE,GAAY,CAAC,EACbC,GAAY,GAChB,SAASC,GAASvO,EAAW,IAAM,CACnC,EAAG,CACD,sBAAe,IAAM,CACnBsO,IAAa,WAAW,IAAM,CAC5BE,GAAiB,CACnB,CAAC,CACH,CAAC,EACM,IAAI,QAASC,GAAQ,CAC1BJ,GAAU,KAAK,IAAM,CACnBrO,EAAS,EACTyO,EAAI,CACN,CAAC,CACH,CAAC,CACH,CACA,SAASD,IAAmB,CAE1B,IADAF,GAAY,GACLD,GAAU,QACfA,GAAU,MAAM,EAAE,CACtB,CACA,SAASK,IAAgB,CACvBJ,GAAY,EACd,CAGA,SAASK,GAAWvN,EAAIO,EAAO,CAC7B,OAAI,MAAM,QAAQA,CAAK,EACdiN,GAAqBxN,EAAIO,EAAM,KAAK,GAAG,CAAC,EACtC,OAAOA,GAAU,UAAYA,IAAU,KACzCkN,GAAqBzN,EAAIO,CAAK,EAC5B,OAAOA,GAAU,WACnBgN,GAAWvN,EAAIO,EAAM,CAAC,EAExBiN,GAAqBxN,EAAIO,CAAK,CACvC,CACA,SAASiN,GAAqBxN,EAAI0N,EAAa,CAC7C,IAAIC,EAASC,GAAiBA,EAAa,MAAM,GAAG,EAAE,OAAO,OAAO,EAChEC,EAAkBD,GAAiBA,EAAa,MAAM,GAAG,EAAE,OAAQzO,GAAM,CAACa,EAAG,UAAU,SAASb,CAAC,CAAC,EAAE,OAAO,OAAO,EAClH2O,EAA2BC,IAC7B/N,EAAG,UAAU,IAAI,GAAG+N,CAAO,EACpB,IAAM,CACX/N,EAAG,UAAU,OAAO,GAAG+N,CAAO,CAChC,GAEF,OAAAL,EAAcA,IAAgB,GAAOA,EAAc,GAAKA,GAAe,GAChEI,EAAwBD,EAAeH,CAAW,CAAC,CAC5D,CACA,SAASD,GAAqBzN,EAAIgO,EAAa,CAC7C,IAAIL,EAASD,GAAgBA,EAAY,MAAM,GAAG,EAAE,OAAO,OAAO,EAC9DO,EAAS,OAAO,QAAQD,CAAW,EAAE,QAAQ,CAAC,CAACN,EAAaQ,CAAI,IAAMA,EAAOP,EAAMD,CAAW,EAAI,EAAK,EAAE,OAAO,OAAO,EACvHS,EAAY,OAAO,QAAQH,CAAW,EAAE,QAAQ,CAAC,CAACN,EAAaQ,CAAI,IAAOA,EAA4B,GAArBP,EAAMD,CAAW,CAAS,EAAE,OAAO,OAAO,EAC3HU,EAAQ,CAAC,EACTC,EAAU,CAAC,EACf,OAAAF,EAAU,QAAShP,GAAM,CACnBa,EAAG,UAAU,SAASb,CAAC,IACzBa,EAAG,UAAU,OAAOb,CAAC,EACrBkP,EAAQ,KAAKlP,CAAC,EAElB,CAAC,EACD8O,EAAO,QAAS9O,GAAM,CACfa,EAAG,UAAU,SAASb,CAAC,IAC1Ba,EAAG,UAAU,IAAIb,CAAC,EAClBiP,EAAM,KAAKjP,CAAC,EAEhB,CAAC,EACM,IAAM,CACXkP,EAAQ,QAASlP,GAAMa,EAAG,UAAU,IAAIb,CAAC,CAAC,EAC1CiP,EAAM,QAASjP,GAAMa,EAAG,UAAU,OAAOb,CAAC,CAAC,CAC7C,CACF,CAGA,SAASmP,GAAUtO,EAAIO,EAAO,CAC5B,OAAI,OAAOA,GAAU,UAAYA,IAAU,KAClCgO,GAAoBvO,EAAIO,CAAK,EAE/BiO,GAAoBxO,EAAIO,CAAK,CACtC,CACA,SAASgO,GAAoBvO,EAAIO,EAAO,CACtC,IAAIkO,EAAiB,CAAC,EACtB,cAAO,QAAQlO,CAAK,EAAE,QAAQ,CAAC,CAACkD,EAAKiL,CAAM,IAAM,CAC/CD,EAAehL,CAAG,EAAIzD,EAAG,MAAMyD,CAAG,EAC7BA,EAAI,WAAW,IAAI,IACtBA,EAAMkL,GAAUlL,CAAG,GAErBzD,EAAG,MAAM,YAAYyD,EAAKiL,CAAM,CAClC,CAAC,EACD,WAAW,IAAM,CACX1O,EAAG,MAAM,SAAW,GACtBA,EAAG,gBAAgB,OAAO,CAE9B,CAAC,EACM,IAAM,CACXsO,GAAUtO,EAAIyO,CAAc,CAC9B,CACF,CACA,SAASD,GAAoBxO,EAAIO,EAAO,CACtC,IAAImF,EAAQ1F,EAAG,aAAa,QAASO,CAAK,EAC1C,OAAAP,EAAG,aAAa,QAASO,CAAK,EACvB,IAAM,CACXP,EAAG,aAAa,QAAS0F,GAAS,EAAE,CACtC,CACF,CACA,SAASiJ,GAAUrH,EAAS,CAC1B,OAAOA,EAAQ,QAAQ,kBAAmB,OAAO,EAAE,YAAY,CACjE,CAGA,SAASsH,GAAKhQ,EAAUiQ,EAAW,IAAM,CACzC,EAAG,CACD,IAAIC,EAAS,GACb,OAAO,UAAW,CACXA,EAIHD,EAAS,MAAM,KAAM,SAAS,GAH9BC,EAAS,GACTlQ,EAAS,MAAM,KAAM,SAAS,EAIlC,CACF,CAGA8I,GAAU,aAAc,CAAC1H,EAAI,CAAE,MAAAO,EAAO,UAAA+J,EAAW,WAAAnF,CAAW,EAAG,CAAE,SAAU4J,CAAU,IAAM,CACrF,OAAO5J,GAAe,aACxBA,EAAa4J,EAAU5J,CAAU,GAC/BA,IAAe,KAEf,CAACA,GAAc,OAAOA,GAAe,UACvC6J,GAA8BhP,EAAIsK,EAAW/J,CAAK,EAElD0O,GAAmCjP,EAAImF,EAAY5E,CAAK,EAE5D,CAAC,EACD,SAAS0O,GAAmCjP,EAAI0N,EAAawB,EAAO,CAClEC,GAAyBnP,EAAIuN,GAAY,EAAE,EACjB,CACxB,MAAUQ,GAAY,CACpB/N,EAAG,cAAc,MAAM,OAAS+N,CAClC,EACA,cAAgBA,GAAY,CAC1B/N,EAAG,cAAc,MAAM,MAAQ+N,CACjC,EACA,YAAcA,GAAY,CACxB/N,EAAG,cAAc,MAAM,IAAM+N,CAC/B,EACA,MAAUA,GAAY,CACpB/N,EAAG,cAAc,MAAM,OAAS+N,CAClC,EACA,cAAgBA,GAAY,CAC1B/N,EAAG,cAAc,MAAM,MAAQ+N,CACjC,EACA,YAAcA,GAAY,CACxB/N,EAAG,cAAc,MAAM,IAAM+N,CAC/B,CACF,EACoBmB,CAAK,EAAExB,CAAW,CACxC,CACA,SAASsB,GAA8BhP,EAAIsK,EAAW4E,EAAO,CAC3DC,GAAyBnP,EAAIsO,EAAS,EACtC,IAAIc,EAAgB,CAAC9E,EAAU,SAAS,IAAI,GAAK,CAACA,EAAU,SAAS,KAAK,GAAK,CAAC4E,EAC5EG,EAAkBD,GAAiB9E,EAAU,SAAS,IAAI,GAAK,CAAC,OAAO,EAAE,SAAS4E,CAAK,EACvFI,EAAmBF,GAAiB9E,EAAU,SAAS,KAAK,GAAK,CAAC,OAAO,EAAE,SAAS4E,CAAK,EACzF5E,EAAU,SAAS,IAAI,GAAK,CAAC8E,IAC/B9E,EAAYA,EAAU,OAAO,CAACnL,EAAGF,IAAUA,EAAQqL,EAAU,QAAQ,KAAK,CAAC,GAEzEA,EAAU,SAAS,KAAK,GAAK,CAAC8E,IAChC9E,EAAYA,EAAU,OAAO,CAACnL,EAAGF,IAAUA,EAAQqL,EAAU,QAAQ,KAAK,CAAC,GAE7E,IAAIiF,EAAW,CAACjF,EAAU,SAAS,SAAS,GAAK,CAACA,EAAU,SAAS,OAAO,EACxEkF,EAAeD,GAAYjF,EAAU,SAAS,SAAS,EACvDmF,EAAaF,GAAYjF,EAAU,SAAS,OAAO,EACnDoF,EAAeF,EAAe,EAAI,EAClCG,EAAaF,EAAaG,GAActF,EAAW,QAAS,EAAE,EAAI,IAAM,EACxEuF,EAAQD,GAActF,EAAW,QAAS,CAAC,EAAI,IAC/CwF,EAASF,GAActF,EAAW,SAAU,QAAQ,EACpDyF,EAAW,qBACXC,EAAaJ,GAActF,EAAW,WAAY,GAAG,EAAI,IACzD2F,EAAcL,GAActF,EAAW,WAAY,EAAE,EAAI,IACzD4F,EAAS,iCACTb,IACFrP,EAAG,cAAc,MAAM,OAAS,CAC9B,gBAAiB8P,EACjB,gBAAiB,GAAGD,CAAK,IACzB,mBAAoBE,EACpB,mBAAoB,GAAGC,CAAU,IACjC,yBAA0BE,CAC5B,EACAlQ,EAAG,cAAc,MAAM,MAAQ,CAC7B,QAAS0P,EACT,UAAW,SAASC,CAAU,GAChC,EACA3P,EAAG,cAAc,MAAM,IAAM,CAC3B,QAAS,EACT,UAAW,UACb,GAEEsP,IACFtP,EAAG,cAAc,MAAM,OAAS,CAC9B,gBAAiB8P,EACjB,gBAAiB,GAAGD,CAAK,IACzB,mBAAoBE,EACpB,mBAAoB,GAAGE,CAAW,IAClC,yBAA0BC,CAC5B,EACAlQ,EAAG,cAAc,MAAM,MAAQ,CAC7B,QAAS,EACT,UAAW,UACb,EACAA,EAAG,cAAc,MAAM,IAAM,CAC3B,QAAS0P,EACT,UAAW,SAASC,CAAU,GAChC,EAEJ,CACA,SAASR,GAAyBnP,EAAImQ,EAAaC,EAAe,CAAC,EAAG,CAC/DpQ,EAAG,gBACNA,EAAG,cAAgB,CACjB,MAAO,CAAE,OAAQoQ,EAAc,MAAOA,EAAc,IAAKA,CAAa,EACtE,MAAO,CAAE,OAAQA,EAAc,MAAOA,EAAc,IAAKA,CAAa,EACtE,GAAGC,EAAS,IAAM,CAClB,EAAGC,EAAQ,IAAM,CACjB,EAAG,CACDC,GAAWvQ,EAAImQ,EAAa,CAC1B,OAAQ,KAAK,MAAM,OACnB,MAAO,KAAK,MAAM,MAClB,IAAK,KAAK,MAAM,GAClB,EAAGE,EAAQC,CAAK,CAClB,EACA,IAAID,EAAS,IAAM,CACnB,EAAGC,EAAQ,IAAM,CACjB,EAAG,CACDC,GAAWvQ,EAAImQ,EAAa,CAC1B,OAAQ,KAAK,MAAM,OACnB,MAAO,KAAK,MAAM,MAClB,IAAK,KAAK,MAAM,GAClB,EAAGE,EAAQC,CAAK,CAClB,CACF,EACJ,CACA,OAAO,QAAQ,UAAU,mCAAqC,SAAStQ,EAAIO,EAAOiQ,EAAMC,EAAM,CAC5F,IAAMC,EAAY,SAAS,kBAAoB,UAAY,sBAAwB,WAC/EC,EAA0B,IAAMD,EAAUF,CAAI,EAClD,GAAIjQ,EAAO,CACLP,EAAG,gBAAkBA,EAAG,cAAc,OAASA,EAAG,cAAc,OAClEA,EAAG,cAAc,QAAU,OAAO,QAAQA,EAAG,cAAc,MAAM,MAAM,EAAE,QAAU,OAAO,QAAQA,EAAG,cAAc,MAAM,KAAK,EAAE,QAAU,OAAO,QAAQA,EAAG,cAAc,MAAM,GAAG,EAAE,QAAUA,EAAG,cAAc,GAAGwQ,CAAI,EAAIG,EAAwB,EAEnP3Q,EAAG,cAAgBA,EAAG,cAAc,GAAGwQ,CAAI,EAAIG,EAAwB,EAEzE,MACF,CACA3Q,EAAG,eAAiBA,EAAG,cAAgB,IAAI,QAAQ,CAAC4Q,EAASC,IAAW,CACtE7Q,EAAG,cAAc,IAAI,IAAM,CAC3B,EAAG,IAAM4Q,EAAQH,CAAI,CAAC,EACtBzQ,EAAG,kBAAoBA,EAAG,iBAAiB,aAAa,IAAM6Q,EAAO,CAAE,0BAA2B,EAAK,CAAC,CAAC,CAC3G,CAAC,EAAI,QAAQ,QAAQJ,CAAI,EACzB,eAAe,IAAM,CACnB,IAAIK,EAAUC,GAAY/Q,CAAE,EACxB8Q,GACGA,EAAQ,kBACXA,EAAQ,gBAAkB,CAAC,GAC7BA,EAAQ,gBAAgB,KAAK9Q,CAAE,GAE/B0Q,EAAU,IAAM,CACd,IAAIM,EAAqBhG,GAAQ,CAC/B,IAAIxG,EAAQ,QAAQ,IAAI,CACtBwG,EAAI,eACJ,IAAIA,EAAI,iBAAmB,CAAC,GAAG,IAAIgG,CAAiB,CACtD,CAAC,EAAE,KAAK,CAAC,CAAC7R,CAAC,IAAMA,IAAI,CAAC,EACtB,cAAO6L,EAAI,eACX,OAAOA,EAAI,gBACJxG,CACT,EACAwM,EAAkBhR,CAAE,EAAE,MAAOqF,GAAM,CACjC,GAAI,CAACA,EAAE,0BACL,MAAMA,CACV,CAAC,CACH,CAAC,CAEL,CAAC,CACH,EACA,SAAS0L,GAAY/Q,EAAI,CACvB,IAAIiR,EAASjR,EAAG,WAChB,GAAKiR,EAEL,OAAOA,EAAO,eAAiBA,EAASF,GAAYE,CAAM,CAC5D,CACA,SAASV,GAAWvQ,EAAImQ,EAAa,CAAE,OAAAe,EAAQ,MAAOC,EAAQ,IAAAC,CAAI,EAAI,CAAC,EAAGf,EAAS,IAAM,CACzF,EAAGC,EAAQ,IAAM,CACjB,EAAG,CAGD,GAFItQ,EAAG,kBACLA,EAAG,iBAAiB,OAAO,EACzB,OAAO,KAAKkR,CAAM,EAAE,SAAW,GAAK,OAAO,KAAKC,CAAM,EAAE,SAAW,GAAK,OAAO,KAAKC,CAAG,EAAE,SAAW,EAAG,CACzGf,EAAO,EACPC,EAAM,EACN,MACF,CACA,IAAIe,EAAWC,EAAYC,EAC3BC,GAAkBxR,EAAI,CACpB,OAAQ,CACNqR,EAAYlB,EAAYnQ,EAAImR,CAAM,CACpC,EACA,QAAS,CACPG,EAAanB,EAAYnQ,EAAIkR,CAAM,CACrC,EACA,OAAAb,EACA,KAAM,CACJgB,EAAU,EACVE,EAAUpB,EAAYnQ,EAAIoR,CAAG,CAC/B,EACA,MAAAd,EACA,SAAU,CACRgB,EAAW,EACXC,EAAQ,CACV,CACF,CAAC,CACH,CACA,SAASC,GAAkBxR,EAAIyR,EAAQ,CACrC,IAAIC,EAAaC,EAAeC,EAC5BC,EAASjD,GAAK,IAAM,CACtBhN,GAAU,IAAM,CACd8P,EAAc,GACTC,GACHF,EAAO,OAAO,EACXG,IACHH,EAAO,IAAI,EACXrE,GAAiB,GAEnBqE,EAAO,MAAM,EACTzR,EAAG,aACLyR,EAAO,QAAQ,EACjB,OAAOzR,EAAG,gBACZ,CAAC,CACH,CAAC,EACDA,EAAG,iBAAmB,CACpB,cAAe,CAAC,EAChB,aAAapB,EAAU,CACrB,KAAK,cAAc,KAAKA,CAAQ,CAClC,EACA,OAAQgQ,GAAK,UAAW,CACtB,KAAO,KAAK,cAAc,QACxB,KAAK,cAAc,MAAM,EAAE,EAG7BiD,EAAO,CACT,CAAC,EACD,OAAAA,CACF,EACAjQ,GAAU,IAAM,CACd6P,EAAO,MAAM,EACbA,EAAO,OAAO,CAChB,CAAC,EACDnE,GAAc,EACd,sBAAsB,IAAM,CAC1B,GAAIoE,EACF,OACF,IAAII,EAAW,OAAO,iBAAiB9R,CAAE,EAAE,mBAAmB,QAAQ,MAAO,EAAE,EAAE,QAAQ,IAAK,EAAE,CAAC,EAAI,IACjG6P,EAAQ,OAAO,iBAAiB7P,CAAE,EAAE,gBAAgB,QAAQ,MAAO,EAAE,EAAE,QAAQ,IAAK,EAAE,CAAC,EAAI,IAC3F8R,IAAa,IACfA,EAAW,OAAO,iBAAiB9R,CAAE,EAAE,kBAAkB,QAAQ,IAAK,EAAE,CAAC,EAAI,KAC/E4B,GAAU,IAAM,CACd6P,EAAO,OAAO,CAChB,CAAC,EACDE,EAAgB,GAChB,sBAAsB,IAAM,CACtBD,IAEJ9P,GAAU,IAAM,CACd6P,EAAO,IAAI,CACb,CAAC,EACDrE,GAAiB,EACjB,WAAWpN,EAAG,iBAAiB,OAAQ8R,EAAWjC,CAAK,EACvD+B,EAAa,GACf,CAAC,CACH,CAAC,CACH,CACA,SAAShC,GAActF,EAAW7G,EAAKoL,EAAU,CAC/C,GAAIvE,EAAU,QAAQ7G,CAAG,IAAM,GAC7B,OAAOoL,EACT,IAAMkD,EAAWzH,EAAUA,EAAU,QAAQ7G,CAAG,EAAI,CAAC,EAGrD,GAFI,CAACsO,GAEDtO,IAAQ,SACN,MAAMsO,CAAQ,EAChB,OAAOlD,EAEX,GAAIpL,IAAQ,YAAcA,IAAQ,QAAS,CACzC,IAAIuO,EAAQD,EAAS,MAAM,YAAY,EACvC,GAAIC,EACF,OAAOA,EAAM,CAAC,CAClB,CACA,OAAIvO,IAAQ,UACN,CAAC,MAAO,QAAS,OAAQ,SAAU,QAAQ,EAAE,SAAS6G,EAAUA,EAAU,QAAQ7G,CAAG,EAAI,CAAC,CAAC,EACtF,CAACsO,EAAUzH,EAAUA,EAAU,QAAQ7G,CAAG,EAAI,CAAC,CAAC,EAAE,KAAK,GAAG,EAG9DsO,CACT,CAGA,IAAIE,GAAY,GAChB,SAASC,GAAgBtT,EAAUiQ,EAAW,IAAM,CACpD,EAAG,CACD,MAAO,IAAIzJ,IAAS6M,GAAYpD,EAAS,GAAGzJ,CAAI,EAAIxG,EAAS,GAAGwG,CAAI,CACtE,CACA,SAAS+M,GAAgBvT,EAAU,CACjC,MAAO,IAAIwG,IAAS6M,IAAarT,EAAS,GAAGwG,CAAI,CACnD,CACA,IAAIgN,GAAe,CAAC,EACpB,SAASC,GAAezT,EAAU,CAChCwT,GAAa,KAAKxT,CAAQ,CAC5B,CACA,SAAS0T,GAAUC,EAAMC,EAAI,CAC3BJ,GAAa,QAASjT,GAAMA,EAAEoT,EAAMC,CAAE,CAAC,EACvCP,GAAY,GACZQ,GAAgC,IAAM,CACpCnH,GAASkH,EAAI,CAACxS,EAAIpB,IAAa,CAC7BA,EAASoB,EAAI,IAAM,CACnB,CAAC,CACH,CAAC,CACH,CAAC,EACDiS,GAAY,EACd,CACA,IAAIS,GAAkB,GACtB,SAASC,GAAMC,EAAOC,EAAO,CACtBA,EAAM,eACTA,EAAM,aAAeD,EAAM,cAC7BX,GAAY,GACZS,GAAkB,GAClBD,GAAgC,IAAM,CACpCK,GAAUD,CAAK,CACjB,CAAC,EACDZ,GAAY,GACZS,GAAkB,EACpB,CACA,SAASI,GAAU9S,EAAI,CACrB,IAAI+S,EAAuB,GAS3BzH,GAAStL,EARW,CAACgL,EAAKpM,IAAa,CACrCmM,GAAKC,EAAK,CAACgI,EAAK/H,IAAS,CACvB,GAAI8H,GAAwBvG,GAAOwG,CAAG,EACpC,OAAO/H,EAAK,EACd8H,EAAuB,GACvBnU,EAASoU,EAAK/H,CAAI,CACpB,CAAC,CACH,CAC0B,CAC5B,CACA,SAASwH,GAAgC7T,EAAU,CACjD,IAAI8G,EAAQrG,GACZQ,GAAe,CAACoT,EAAWjT,IAAO,CAChC,IAAIkT,EAAexN,EAAMuN,CAAS,EAClC,OAAA3T,GAAQ4T,CAAY,EACb,IAAM,CACb,CACF,CAAC,EACDtU,EAAS,EACTiB,GAAe6F,CAAK,CACtB,CAGA,SAASyN,GAAKnT,EAAIe,EAAMR,EAAO+J,EAAY,CAAC,EAAG,CAK7C,OAJKtK,EAAG,cACNA,EAAG,YAAcZ,GAAS,CAAC,CAAC,GAC9BY,EAAG,YAAYe,CAAI,EAAIR,EACvBQ,EAAOuJ,EAAU,SAAS,OAAO,EAAI8I,GAAUrS,CAAI,EAAIA,EAC/CA,EAAM,CACZ,IAAK,QACHsS,GAAerT,EAAIO,CAAK,EACxB,MACF,IAAK,QACH+S,GAAWtT,EAAIO,CAAK,EACpB,MACF,IAAK,QACHgT,GAAYvT,EAAIO,CAAK,EACrB,MACF,IAAK,WACL,IAAK,UACHiT,GAAyBxT,EAAIe,EAAMR,CAAK,EACxC,MACF,QACEkT,GAAczT,EAAIe,EAAMR,CAAK,EAC7B,KACJ,CACF,CACA,SAAS8S,GAAerT,EAAIO,EAAO,CACjC,GAAImT,GAAQ1T,CAAE,EACRA,EAAG,WAAW,QAAU,SAC1BA,EAAG,MAAQO,GAET,OAAO,YACL,OAAOA,GAAU,UACnBP,EAAG,QAAU2T,GAAiB3T,EAAG,KAAK,IAAMO,EAE5CP,EAAG,QAAU4T,GAAwB5T,EAAG,MAAOO,CAAK,WAG/CsT,GAAW7T,CAAE,EAClB,OAAO,UAAUO,CAAK,EACxBP,EAAG,MAAQO,EACF,CAAC,MAAM,QAAQA,CAAK,GAAK,OAAOA,GAAU,WAAa,CAAC,CAAC,KAAM,MAAM,EAAE,SAASA,CAAK,EAC9FP,EAAG,MAAQ,OAAOO,CAAK,EAEnB,MAAM,QAAQA,CAAK,EACrBP,EAAG,QAAUO,EAAM,KAAMqD,GAAQgQ,GAAwBhQ,EAAK5D,EAAG,KAAK,CAAC,EAEvEA,EAAG,QAAU,CAAC,CAACO,UAGVP,EAAG,UAAY,SACxB8T,GAAa9T,EAAIO,CAAK,MACjB,CACL,GAAIP,EAAG,QAAUO,EACf,OACFP,EAAG,MAAQO,IAAU,OAAS,GAAKA,CACrC,CACF,CACA,SAASgT,GAAYvT,EAAIO,EAAO,CAC1BP,EAAG,qBACLA,EAAG,oBAAoB,EACzBA,EAAG,oBAAsBuN,GAAWvN,EAAIO,CAAK,CAC/C,CACA,SAAS+S,GAAWtT,EAAIO,EAAO,CACzBP,EAAG,oBACLA,EAAG,mBAAmB,EACxBA,EAAG,mBAAqBsO,GAAUtO,EAAIO,CAAK,CAC7C,CACA,SAASiT,GAAyBxT,EAAIe,EAAMR,EAAO,CACjDkT,GAAczT,EAAIe,EAAMR,CAAK,EAC7BwT,GAAqB/T,EAAIe,EAAMR,CAAK,CACtC,CACA,SAASkT,GAAczT,EAAIe,EAAMR,EAAO,CAClC,CAAC,KAAM,OAAQ,EAAK,EAAE,SAASA,CAAK,GAAKyT,GAAoCjT,CAAI,EACnFf,EAAG,gBAAgBe,CAAI,GAEnBkT,GAAclT,CAAI,IACpBR,EAAQQ,GACVmT,GAAalU,EAAIe,EAAMR,CAAK,EAEhC,CACA,SAAS2T,GAAalU,EAAImU,EAAU5T,EAAO,CACrCP,EAAG,aAAamU,CAAQ,GAAK5T,GAC/BP,EAAG,aAAamU,EAAU5T,CAAK,CAEnC,CACA,SAASwT,GAAqB/T,EAAIoU,EAAU7T,EAAO,CAC7CP,EAAGoU,CAAQ,IAAM7T,IACnBP,EAAGoU,CAAQ,EAAI7T,EAEnB,CACA,SAASuT,GAAa9T,EAAIO,EAAO,CAC/B,IAAM8T,EAAoB,CAAC,EAAE,OAAO9T,CAAK,EAAE,IAAKmO,GACvCA,EAAS,EACjB,EACD,MAAM,KAAK1O,EAAG,OAAO,EAAE,QAASsU,GAAW,CACzCA,EAAO,SAAWD,EAAkB,SAASC,EAAO,KAAK,CAC3D,CAAC,CACH,CACA,SAASlB,GAAU9L,EAAS,CAC1B,OAAOA,EAAQ,YAAY,EAAE,QAAQ,SAAU,CAAC0K,EAAOuC,IAASA,EAAK,YAAY,CAAC,CACpF,CACA,SAASX,GAAwBY,EAAQC,EAAQ,CAC/C,OAAOD,GAAUC,CACnB,CACA,SAASd,GAAiB5B,EAAU,CAClC,MAAI,CAAC,EAAG,IAAK,OAAQ,KAAM,MAAO,EAAI,EAAE,SAASA,CAAQ,EAChD,GAEL,CAAC,EAAG,IAAK,QAAS,MAAO,KAAM,EAAK,EAAE,SAASA,CAAQ,EAClD,GAEFA,EAAW,EAAQA,EAAY,IACxC,CACA,IAAI2C,GAAoC,IAAI,IAAI,CAC9C,kBACA,QACA,YACA,WACA,UACA,WACA,UACA,QACA,WACA,iBACA,QACA,QACA,YACA,OACA,WACA,QACA,WACA,aACA,OACA,cACA,WACA,WACA,WACA,WACA,qBACA,2BACA,wBACF,CAAC,EACD,SAAST,GAAcE,EAAU,CAC/B,OAAOO,GAAkB,IAAIP,CAAQ,CACvC,CACA,SAASH,GAAoCjT,EAAM,CACjD,MAAO,CAAC,CAAC,eAAgB,eAAgB,gBAAiB,eAAe,EAAE,SAASA,CAAI,CAC1F,CACA,SAAS4T,GAAW3U,EAAIe,EAAM8N,EAAU,CACtC,OAAI7O,EAAG,aAAeA,EAAG,YAAYe,CAAI,IAAM,OACtCf,EAAG,YAAYe,CAAI,EACrB6T,GAAoB5U,EAAIe,EAAM8N,CAAQ,CAC/C,CACA,SAASgG,GAAY7U,EAAIe,EAAM8N,EAAUiG,EAAU,GAAM,CACvD,GAAI9U,EAAG,aAAeA,EAAG,YAAYe,CAAI,IAAM,OAC7C,OAAOf,EAAG,YAAYe,CAAI,EAC5B,GAAIf,EAAG,mBAAqBA,EAAG,kBAAkBe,CAAI,IAAM,OAAQ,CACjE,IAAIgU,EAAU/U,EAAG,kBAAkBe,CAAI,EACvC,OAAAgU,EAAQ,QAAUD,EACXrP,GAA0B,IACxBE,GAAS3F,EAAI+U,EAAQ,UAAU,CACvC,CACH,CACA,OAAOH,GAAoB5U,EAAIe,EAAM8N,CAAQ,CAC/C,CACA,SAAS+F,GAAoB5U,EAAIe,EAAM8N,EAAU,CAC/C,IAAIvG,EAAOtI,EAAG,aAAae,CAAI,EAC/B,OAAIuH,IAAS,KACJ,OAAOuG,GAAa,WAAaA,EAAS,EAAIA,EACnDvG,IAAS,GACJ,GACL2L,GAAclT,CAAI,EACb,CAAC,CAAC,CAACA,EAAM,MAAM,EAAE,SAASuH,CAAI,EAEhCA,CACT,CACA,SAASuL,GAAW7T,EAAI,CACtB,OAAOA,EAAG,OAAS,YAAcA,EAAG,YAAc,eAAiBA,EAAG,YAAc,WACtF,CACA,SAAS0T,GAAQ1T,EAAI,CACnB,OAAOA,EAAG,OAAS,SAAWA,EAAG,YAAc,UACjD,CAGA,SAASgV,GAASzO,EAAM0O,EAAM,CAC5B,IAAIC,EACJ,OAAO,UAAW,CAChB,IAAMvO,EAAU,KAAMvB,EAAO,UACvB+P,EAAQ,UAAW,CACvBD,EAAU,KACV3O,EAAK,MAAMI,EAASvB,CAAI,CAC1B,EACA,aAAa8P,CAAO,EACpBA,EAAU,WAAWC,EAAOF,CAAI,CAClC,CACF,CAGA,SAASG,GAAS7O,EAAM8O,EAAO,CAC7B,IAAIC,EACJ,OAAO,UAAW,CAChB,IAAI3O,EAAU,KAAMvB,EAAO,UACtBkQ,IACH/O,EAAK,MAAMI,EAASvB,CAAI,EACxBkQ,EAAa,GACb,WAAW,IAAMA,EAAa,GAAOD,CAAK,EAE9C,CACF,CAGA,SAASE,GAAS,CAAE,IAAKC,EAAU,IAAKC,CAAS,EAAG,CAAE,IAAKC,EAAU,IAAKC,CAAS,EAAG,CACpF,IAAIC,EAAW,GACXC,EACAC,EACAC,EAAY1W,GAAO,IAAM,CAC3B,IAAI2W,EAAQR,EAAS,EACjBS,EAAQP,EAAS,EACrB,GAAIE,EACFD,EAASO,GAAcF,CAAK,CAAC,EAC7BJ,EAAW,OACN,CACL,IAAIO,EAAkB,KAAK,UAAUH,CAAK,EACtCI,EAAkB,KAAK,UAAUH,CAAK,EACtCE,IAAoBN,EACtBF,EAASO,GAAcF,CAAK,CAAC,EACpBG,IAAoBC,GAC7BX,EAASS,GAAcD,CAAK,CAAC,CAGjC,CACAJ,EAAY,KAAK,UAAUL,EAAS,CAAC,EACrCM,EAAY,KAAK,UAAUJ,EAAS,CAAC,CACvC,CAAC,EACD,MAAO,IAAM,CACXpW,GAAQyW,CAAS,CACnB,CACF,CACA,SAASG,GAAc3V,EAAO,CAC5B,OAAO,OAAOA,GAAU,SAAW,KAAK,MAAM,KAAK,UAAUA,CAAK,CAAC,EAAIA,CACzE,CAGA,SAAS8V,GAAOzX,EAAU,EACR,MAAM,QAAQA,CAAQ,EAAIA,EAAW,CAACA,CAAQ,GACpD,QAASO,GAAMA,EAAEqK,EAAc,CAAC,CAC5C,CAGA,IAAI8M,GAAS,CAAC,EACVC,GAAa,GACjB,SAASC,GAAMzV,EAAMR,EAAO,CAK1B,GAJKgW,KACHD,GAASlX,GAASkX,EAAM,EACxBC,GAAa,IAEXhW,IAAU,OACZ,OAAO+V,GAAOvV,CAAI,EAEpBuV,GAAOvV,CAAI,EAAIR,EACfmD,GAAiB4S,GAAOvV,CAAI,CAAC,EACzB,OAAOR,GAAU,UAAYA,IAAU,MAAQA,EAAM,eAAe,MAAM,GAAK,OAAOA,EAAM,MAAS,YACvG+V,GAAOvV,CAAI,EAAE,KAAK,CAEtB,CACA,SAAS0V,IAAY,CACnB,OAAOH,EACT,CAGA,IAAII,GAAQ,CAAC,EACb,SAASC,GAAM5V,EAAM6V,EAAU,CAC7B,IAAIC,EAAc,OAAOD,GAAa,WAAa,IAAMA,EAAWA,EACpE,OAAI7V,aAAgB,QACX+V,GAAoB/V,EAAM8V,EAAY,CAAC,GAE9CH,GAAM3V,CAAI,EAAI8V,EAET,IAAM,CACb,EACF,CACA,SAASE,GAAuB5T,EAAK,CACnC,cAAO,QAAQuT,EAAK,EAAE,QAAQ,CAAC,CAAC3V,EAAMnC,CAAQ,IAAM,CAClD,OAAO,eAAeuE,EAAKpC,EAAM,CAC/B,KAAM,CACJ,MAAO,IAAIqE,IACFxG,EAAS,GAAGwG,CAAI,CAE3B,CACF,CAAC,CACH,CAAC,EACMjC,CACT,CACA,SAAS2T,GAAoB9W,EAAImD,EAAKoH,EAAU,CAC9C,IAAIyM,EAAiB,CAAC,EACtB,KAAOA,EAAe,QACpBA,EAAe,IAAI,EAAE,EACvB,IAAIhP,EAAa,OAAO,QAAQ7E,CAAG,EAAE,IAAI,CAAC,CAACpC,EAAMR,CAAK,KAAO,CAAE,KAAAQ,EAAM,MAAAR,CAAM,EAAE,EACzE4H,EAAmBC,GAAeJ,CAAU,EAChD,OAAAA,EAAaA,EAAW,IAAKK,GACvBF,EAAiB,KAAMG,GAASA,EAAK,OAASD,EAAU,IAAI,EACvD,CACL,KAAM,UAAUA,EAAU,IAAI,GAC9B,MAAO,IAAIA,EAAU,KAAK,GAC5B,EAEKA,CACR,EACDN,GAAW/H,EAAIgI,EAAYuC,CAAQ,EAAE,IAAKiB,GAAW,CACnDwL,EAAe,KAAKxL,EAAO,WAAW,EACtCA,EAAO,CACT,CAAC,EACM,IAAM,CACX,KAAOwL,EAAe,QACpBA,EAAe,IAAI,EAAE,CACzB,CACF,CAGA,IAAIC,GAAQ,CAAC,EACb,SAASC,GAAKnW,EAAMnC,EAAU,CAC5BqY,GAAMlW,CAAI,EAAInC,CAChB,CACA,SAASuY,GAAoBhU,EAAKwD,EAAS,CACzC,cAAO,QAAQsQ,EAAK,EAAE,QAAQ,CAAC,CAAClW,EAAMnC,CAAQ,IAAM,CAClD,OAAO,eAAeuE,EAAKpC,EAAM,CAC/B,KAAM,CACJ,MAAO,IAAIqE,IACFxG,EAAS,KAAK+H,CAAO,EAAE,GAAGvB,CAAI,CAEzC,EACA,WAAY,EACd,CAAC,CACH,CAAC,EACMjC,CACT,CAGA,IAAIiU,GAAS,CACX,IAAI,UAAW,CACb,OAAOhY,EACT,EACA,IAAI,SAAU,CACZ,OAAOE,EACT,EACA,IAAI,QAAS,CACX,OAAOD,EACT,EACA,IAAI,KAAM,CACR,OAAOE,EACT,EACA,QAAS,SACT,+BAAA0C,GACA,0BAAAwD,GACA,wBAAAhG,GACA,wBAAA6B,GACA,uBAAAC,GACA,oBAAA7B,GACA,mBAAAoB,GACA,kBAAAD,GACA,iBAAAgC,GACA,gBAAAqP,GACA,gBAAAC,GACA,gBAAAlG,GACA,gBAAAE,GACA,eAAAkG,GACA,eAAAvP,GACA,eAAAd,GACA,cAAAkI,GACA,cAAArE,GACA,cAAA6G,GACA,aAAA1G,GACA,aAAApD,GACA,YAAAiS,GACA,YAAAxI,GACA,YAAAzL,GACA,YAAA8K,GACA,YAAAH,GACA,YAAAtH,GAEA,WAAAsM,GAEA,UAAAjC,GAEA,UAAA1M,GACA,UAAA8F,GACA,SAAA6N,GACA,SAAAH,GACA,SAAAJ,GACA,SAAArP,GACA,SAAA2F,GACA,SAAA6B,GACA,SAAU9F,GACV,OAAQE,GACR,OAAA8O,GACA,MAAA1R,GACA,MAAA6R,GACA,MAAAnL,GACA,MAAAsH,GAEA,UAAAL,GAEA,MAAOqC,GACP,MAAOhS,GACP,MAAAxC,GACA,KAAA4K,GACA,KAAAmM,GACA,KAAMP,EACR,EACInN,GAAiB4N,GAGrB,SAASC,GAAQC,EAAKC,EAAkB,CACtC,IAAMC,EAAsB,OAAO,OAAO,IAAI,EACxCC,EAAOH,EAAI,MAAM,GAAG,EAC1B,QAASnY,EAAI,EAAGA,EAAIsY,EAAK,OAAQtY,IAC/BqY,EAAIC,EAAKtY,CAAC,CAAC,EAAI,GAEjB,OAAOoY,EAAoB3T,GAAQ,CAAC,CAAC4T,EAAI5T,EAAI,YAAY,CAAC,EAAKA,GAAQ,CAAC,CAAC4T,EAAI5T,CAAG,CAClF,CACA,IAAI8T,GAAsB,8EACtBC,GAAiCN,GAAQK,GAAsB,8IAA8I,EAC7ME,GAAmB,OAAO,OAAO,CAAC,CAAC,EACnCC,GAAmB,OAAO,OAAO,CAAC,CAAC,EACnCC,GAAiB,OAAO,UAAU,eAClCC,GAAS,CAACnU,EAAKH,IAAQqU,GAAe,KAAKlU,EAAKH,CAAG,EACnDuU,GAAU,MAAM,QAChBC,GAASrU,GAAQsU,GAAatU,CAAG,IAAM,eACvCuU,GAAYvU,GAAQ,OAAOA,GAAQ,SACnCwU,GAAYxU,GAAQ,OAAOA,GAAQ,SACnCyU,GAAYzU,GAAQA,IAAQ,MAAQ,OAAOA,GAAQ,SACnD0U,GAAiB,OAAO,UAAU,SAClCJ,GAAgB3X,GAAU+X,GAAe,KAAK/X,CAAK,EACnDgY,GAAahY,GACR2X,GAAa3X,CAAK,EAAE,MAAM,EAAG,EAAE,EAEpCiY,GAAgB/U,GAAQ0U,GAAS1U,CAAG,GAAKA,IAAQ,OAASA,EAAI,CAAC,IAAM,KAAO,GAAK,SAASA,EAAK,EAAE,IAAMA,EACvGgV,GAAuBzM,GAAO,CAChC,IAAMtG,EAAwB,OAAO,OAAO,IAAI,EAChD,OAAQ4R,GACM5R,EAAM4R,CAAG,IACN5R,EAAM4R,CAAG,EAAItL,EAAGsL,CAAG,EAEtC,EACIoB,GAAa,SACbC,GAAWF,GAAqBnB,GAC3BA,EAAI,QAAQoB,GAAY,CAACE,EAAGC,IAAMA,EAAIA,EAAE,YAAY,EAAI,EAAE,CAClE,EACGC,GAAc,aACdC,GAAYN,GAAqBnB,GAAQA,EAAI,QAAQwB,GAAa,KAAK,EAAE,YAAY,CAAC,EACtFE,GAAaP,GAAqBnB,GAAQA,EAAI,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAI,MAAM,CAAC,CAAC,EACpF2B,GAAeR,GAAqBnB,GAAQA,EAAM,KAAK0B,GAAW1B,CAAG,CAAC,GAAK,EAAE,EAC7E4B,GAAa,CAAC3Y,EAAOD,IAAaC,IAAUD,IAAaC,IAAUA,GAASD,IAAaA,GAGzF6Y,GAA4B,IAAI,QAChCC,GAAc,CAAC,EACfC,GACAC,GAAc,OAAc,SAAc,EAC1CC,GAAsB,OAAc,iBAAsB,EAC9D,SAASC,GAASxN,EAAI,CACpB,OAAOA,GAAMA,EAAG,YAAc,EAChC,CACA,SAASyN,GAAQzN,EAAI0N,EAAU9B,GAAW,CACpC4B,GAASxN,CAAE,IACbA,EAAKA,EAAG,KAEV,IAAM1C,EAAUqQ,GAAqB3N,EAAI0N,CAAO,EAChD,OAAKA,EAAQ,MACXpQ,EAAQ,EAEHA,CACT,CACA,SAASsQ,GAAKtQ,EAAS,CACjBA,EAAQ,SACVuQ,GAAQvQ,CAAO,EACXA,EAAQ,QAAQ,QAClBA,EAAQ,QAAQ,OAAO,EAEzBA,EAAQ,OAAS,GAErB,CACA,IAAIwQ,GAAM,EACV,SAASH,GAAqB3N,EAAI0N,EAAS,CACzC,IAAMpQ,EAAU,UAA0B,CACxC,GAAI,CAACA,EAAQ,OACX,OAAO0C,EAAG,EAEZ,GAAI,CAACoN,GAAY,SAAS9P,CAAO,EAAG,CAClCuQ,GAAQvQ,CAAO,EACf,GAAI,CACF,OAAAyQ,GAAe,EACfX,GAAY,KAAK9P,CAAO,EACxB+P,GAAe/P,EACR0C,EAAG,CACZ,QAAE,CACAoN,GAAY,IAAI,EAChBY,GAAc,EACdX,GAAeD,GAAYA,GAAY,OAAS,CAAC,CACnD,CACF,CACF,EACA,OAAA9P,EAAQ,GAAKwQ,KACbxQ,EAAQ,aAAe,CAAC,CAACoQ,EAAQ,aACjCpQ,EAAQ,UAAY,GACpBA,EAAQ,OAAS,GACjBA,EAAQ,IAAM0C,EACd1C,EAAQ,KAAO,CAAC,EAChBA,EAAQ,QAAUoQ,EACXpQ,CACT,CACA,SAASuQ,GAAQvQ,EAAS,CACxB,GAAM,CAAE,KAAA2Q,CAAK,EAAI3Q,EACjB,GAAI2Q,EAAK,OAAQ,CACf,QAAS9a,EAAI,EAAGA,EAAI8a,EAAK,OAAQ9a,IAC/B8a,EAAK9a,CAAC,EAAE,OAAOmK,CAAO,EAExB2Q,EAAK,OAAS,CAChB,CACF,CACA,IAAIC,GAAc,GACdC,GAAa,CAAC,EAClB,SAASC,IAAgB,CACvBD,GAAW,KAAKD,EAAW,EAC3BA,GAAc,EAChB,CACA,SAASH,IAAiB,CACxBI,GAAW,KAAKD,EAAW,EAC3BA,GAAc,EAChB,CACA,SAASF,IAAgB,CACvB,IAAMK,EAAOF,GAAW,IAAI,EAC5BD,GAAcG,IAAS,OAAS,GAAOA,CACzC,CACA,SAASC,GAAMhX,EAAQiX,EAAM9W,EAAK,CAChC,GAAI,CAACyW,IAAeb,KAAiB,OACnC,OAEF,IAAImB,EAAUrB,GAAU,IAAI7V,CAAM,EAC7BkX,GACHrB,GAAU,IAAI7V,EAAQkX,EAA0B,IAAI,GAAK,EAE3D,IAAIC,EAAMD,EAAQ,IAAI/W,CAAG,EACpBgX,GACHD,EAAQ,IAAI/W,EAAKgX,EAAsB,IAAI,GAAK,EAE7CA,EAAI,IAAIpB,EAAY,IACvBoB,EAAI,IAAIpB,EAAY,EACpBA,GAAa,KAAK,KAAKoB,CAAG,EACtBpB,GAAa,QAAQ,SACvBA,GAAa,QAAQ,QAAQ,CAC3B,OAAQA,GACR,OAAA/V,EACA,KAAAiX,EACA,IAAA9W,CACF,CAAC,EAGP,CACA,SAASiX,GAAQpX,EAAQiX,EAAM9W,EAAKsG,EAAUzJ,EAAUqa,EAAW,CACjE,IAAMH,EAAUrB,GAAU,IAAI7V,CAAM,EACpC,GAAI,CAACkX,EACH,OAEF,IAAMI,EAA0B,IAAI,IAC9BpY,EAAQqY,GAAiB,CACzBA,GACFA,EAAa,QAASvR,GAAY,EAC5BA,IAAY+P,IAAgB/P,EAAQ,eACtCsR,EAAQ,IAAItR,CAAO,CAEvB,CAAC,CAEL,EACA,GAAIiR,IAAS,QACXC,EAAQ,QAAQhY,CAAI,UACXiB,IAAQ,UAAYuU,GAAQ1U,CAAM,EAC3CkX,EAAQ,QAAQ,CAACC,EAAKK,IAAS,EACzBA,IAAS,UAAYA,GAAQ/Q,IAC/BvH,EAAKiY,CAAG,CAEZ,CAAC,MAKD,QAHIhX,IAAQ,QACVjB,EAAKgY,EAAQ,IAAI/W,CAAG,CAAC,EAEf8W,EAAM,CACZ,IAAK,MACEvC,GAAQ1U,CAAM,EAKRkV,GAAa/U,CAAG,GACzBjB,EAAKgY,EAAQ,IAAI,QAAQ,CAAC,GAL1BhY,EAAKgY,EAAQ,IAAIlB,EAAW,CAAC,EACzBrB,GAAM3U,CAAM,GACdd,EAAKgY,EAAQ,IAAIjB,EAAmB,CAAC,GAKzC,MACF,IAAK,SACEvB,GAAQ1U,CAAM,IACjBd,EAAKgY,EAAQ,IAAIlB,EAAW,CAAC,EACzBrB,GAAM3U,CAAM,GACdd,EAAKgY,EAAQ,IAAIjB,EAAmB,CAAC,GAGzC,MACF,IAAK,MACCtB,GAAM3U,CAAM,GACdd,EAAKgY,EAAQ,IAAIlB,EAAW,CAAC,EAE/B,KACJ,CAEF,IAAMyB,EAAOzR,GAAY,CACnBA,EAAQ,QAAQ,WAClBA,EAAQ,QAAQ,UAAU,CACxB,OAAQA,EACR,OAAAhG,EACA,IAAAG,EACA,KAAA8W,EACA,SAAAxQ,EACA,SAAAzJ,EACA,UAAAqa,CACF,CAAC,EAECrR,EAAQ,QAAQ,UAClBA,EAAQ,QAAQ,UAAUA,CAAO,EAEjCA,EAAQ,CAEZ,EACAsR,EAAQ,QAAQG,CAAG,CACrB,CACA,IAAIC,GAAqC3D,GAAQ,6BAA6B,EAC1E4D,GAAiB,IAAI,IAAI,OAAO,oBAAoB,MAAM,EAAE,IAAKxX,GAAQ,OAAOA,CAAG,CAAC,EAAE,OAAO2U,EAAQ,CAAC,EACtG8C,GAAuBC,GAAa,EACpCC,GAA8BD,GAAa,EAAI,EAC/CE,GAAwCC,GAA4B,EACxE,SAASA,IAA8B,CACrC,IAAMC,EAAmB,CAAC,EAC1B,OAAC,WAAY,UAAW,aAAa,EAAE,QAAS9X,GAAQ,CACtD8X,EAAiB9X,CAAG,EAAI,YAAY2B,EAAM,CACxC,IAAMoW,EAAMC,GAAM,IAAI,EACtB,QAAStc,EAAI,EAAGuc,EAAI,KAAK,OAAQvc,EAAIuc,EAAGvc,IACtCmb,GAAMkB,EAAK,MAAOrc,EAAI,EAAE,EAE1B,IAAMkO,EAAMmO,EAAI/X,CAAG,EAAE,GAAG2B,CAAI,EAC5B,OAAIiI,IAAQ,IAAMA,IAAQ,GACjBmO,EAAI/X,CAAG,EAAE,GAAG2B,EAAK,IAAIqW,EAAK,CAAC,EAE3BpO,CAEX,CACF,CAAC,EACD,CAAC,OAAQ,MAAO,QAAS,UAAW,QAAQ,EAAE,QAAS5J,GAAQ,CAC7D8X,EAAiB9X,CAAG,EAAI,YAAY2B,EAAM,CACxCgV,GAAc,EACd,IAAM/M,EAAMoO,GAAM,IAAI,EAAEhY,CAAG,EAAE,MAAM,KAAM2B,CAAI,EAC7C,OAAA4U,GAAc,EACP3M,CACT,CACF,CAAC,EACMkO,CACT,CACA,SAASJ,GAAaQ,EAAa,GAAOC,EAAU,GAAO,CACzD,OAAO,SAActY,EAAQG,EAAK+C,EAAU,CAC1C,GAAI/C,IAAQ,iBACV,MAAO,CAACkY,EACH,GAAIlY,IAAQ,iBACjB,OAAOkY,EACF,GAAIlY,IAAQ,WAAa+C,KAAcmV,EAAaC,EAAUC,GAAqBC,GAAcF,EAAUG,GAAqBC,IAAa,IAAI1Y,CAAM,EAC5J,OAAOA,EAET,IAAM2Y,EAAgBjE,GAAQ1U,CAAM,EACpC,GAAI,CAACqY,GAAcM,GAAiBlE,GAAOsD,GAAuB5X,CAAG,EACnE,OAAO,QAAQ,IAAI4X,GAAuB5X,EAAK+C,CAAQ,EAEzD,IAAM6G,EAAM,QAAQ,IAAI/J,EAAQG,EAAK+C,CAAQ,EAO7C,OANI4R,GAAS3U,CAAG,EAAIwX,GAAe,IAAIxX,CAAG,EAAIuX,GAAmBvX,CAAG,KAG/DkY,GACHrB,GAAMhX,EAAQ,MAAOG,CAAG,EAEtBmY,GACKvO,EAEL6O,GAAM7O,CAAG,EACU,CAAC4O,GAAiB,CAACzD,GAAa/U,CAAG,EAClC4J,EAAI,MAAQA,EAEhCgL,GAAShL,CAAG,EACPsO,EAAaQ,GAAS9O,CAAG,EAAI+O,GAAU/O,CAAG,EAE5CA,CACT,CACF,CACA,IAAIgP,GAAuBC,GAAa,EACxC,SAASA,GAAaV,EAAU,GAAO,CACrC,OAAO,SAActY,EAAQG,EAAKlD,EAAOiG,EAAU,CACjD,IAAIlG,EAAWgD,EAAOG,CAAG,EACzB,GAAI,CAACmY,IACHrb,EAAQkb,GAAMlb,CAAK,EACnBD,EAAWmb,GAAMnb,CAAQ,EACrB,CAAC0X,GAAQ1U,CAAM,GAAK4Y,GAAM5b,CAAQ,GAAK,CAAC4b,GAAM3b,CAAK,GACrD,OAAAD,EAAS,MAAQC,EACV,GAGX,IAAMgc,EAASvE,GAAQ1U,CAAM,GAAKkV,GAAa/U,CAAG,EAAI,OAAOA,CAAG,EAAIH,EAAO,OAASyU,GAAOzU,EAAQG,CAAG,EAChG5B,EAAS,QAAQ,IAAIyB,EAAQG,EAAKlD,EAAOiG,CAAQ,EACvD,OAAIlD,IAAWmY,GAAMjV,CAAQ,IACtB+V,EAEMrD,GAAW3Y,EAAOD,CAAQ,GACnCoa,GAAQpX,EAAQ,MAAOG,EAAKlD,EAAOD,CAAQ,EAF3Coa,GAAQpX,EAAQ,MAAOG,EAAKlD,CAAK,GAK9BsB,CACT,CACF,CACA,SAAS2a,GAAelZ,EAAQG,EAAK,CACnC,IAAM8Y,EAASxE,GAAOzU,EAAQG,CAAG,EAC3BnD,EAAWgD,EAAOG,CAAG,EACrB5B,EAAS,QAAQ,eAAeyB,EAAQG,CAAG,EACjD,OAAI5B,GAAU0a,GACZ7B,GAAQpX,EAAQ,SAAUG,EAAK,OAAQnD,CAAQ,EAE1CuB,CACT,CACA,SAAS4a,GAAInZ,EAAQG,EAAK,CACxB,IAAM5B,EAAS,QAAQ,IAAIyB,EAAQG,CAAG,EACtC,OAAI,CAAC2U,GAAS3U,CAAG,GAAK,CAACwX,GAAe,IAAIxX,CAAG,IAC3C6W,GAAMhX,EAAQ,MAAOG,CAAG,EAEnB5B,CACT,CACA,SAAS6a,GAAQpZ,EAAQ,CACvB,OAAAgX,GAAMhX,EAAQ,UAAW0U,GAAQ1U,CAAM,EAAI,SAAWgW,EAAW,EAC1D,QAAQ,QAAQhW,CAAM,CAC/B,CACA,IAAIqZ,GAAkB,CACpB,IAAKzB,GACL,IAAKmB,GACL,eAAAG,GACA,IAAAC,GACA,QAAAC,EACF,EACIE,GAAmB,CACrB,IAAKxB,GACL,IAAI9X,EAAQG,EAAK,CAEb,eAAQ,KAAK,yBAAyB,OAAOA,CAAG,CAAC,gCAAiCH,CAAM,EAEnF,EACT,EACA,eAAeA,EAAQG,EAAK,CAExB,eAAQ,KAAK,4BAA4B,OAAOA,CAAG,CAAC,gCAAiCH,CAAM,EAEtF,EACT,CACF,EACIuZ,GAActc,GAAU8X,GAAS9X,CAAK,EAAI6b,GAAU7b,CAAK,EAAIA,EAC7Duc,GAAcvc,GAAU8X,GAAS9X,CAAK,EAAI4b,GAAS5b,CAAK,EAAIA,EAC5Dwc,GAAaxc,GAAUA,EACvByc,GAAYC,GAAM,QAAQ,eAAeA,CAAC,EAC9C,SAASC,GAAM5Z,EAAQG,EAAKkY,EAAa,GAAOwB,EAAY,GAAO,CACjE7Z,EAASA,EACP,QAGF,IAAM8Z,EAAY3B,GAAMnY,CAAM,EACxB+Z,EAAS5B,GAAMhY,CAAG,EACpBA,IAAQ4Z,GACV,CAAC1B,GAAcrB,GAAM8C,EAAW,MAAO3Z,CAAG,EAE5C,CAACkY,GAAcrB,GAAM8C,EAAW,MAAOC,CAAM,EAC7C,GAAM,CAAE,IAAKC,CAAK,EAAIN,GAASI,CAAS,EAClCG,EAAOJ,EAAYJ,GAAYpB,EAAamB,GAAaD,GAC/D,GAAIS,EAAK,KAAKF,EAAW3Z,CAAG,EAC1B,OAAO8Z,EAAKja,EAAO,IAAIG,CAAG,CAAC,EACtB,GAAI6Z,EAAK,KAAKF,EAAWC,CAAM,EACpC,OAAOE,EAAKja,EAAO,IAAI+Z,CAAM,CAAC,EACrB/Z,IAAW8Z,GACpB9Z,EAAO,IAAIG,CAAG,CAElB,CACA,SAAS+Z,GAAM/Z,EAAKkY,EAAa,GAAO,CACtC,IAAMrY,EAAS,KACb,QAGI8Z,EAAY3B,GAAMnY,CAAM,EACxB+Z,EAAS5B,GAAMhY,CAAG,EACxB,OAAIA,IAAQ4Z,GACV,CAAC1B,GAAcrB,GAAM8C,EAAW,MAAO3Z,CAAG,EAE5C,CAACkY,GAAcrB,GAAM8C,EAAW,MAAOC,CAAM,EACtC5Z,IAAQ4Z,EAAS/Z,EAAO,IAAIG,CAAG,EAAIH,EAAO,IAAIG,CAAG,GAAKH,EAAO,IAAI+Z,CAAM,CAChF,CACA,SAASI,GAAKna,EAAQqY,EAAa,GAAO,CACxC,OAAArY,EAASA,EACP,QAGF,CAACqY,GAAcrB,GAAMmB,GAAMnY,CAAM,EAAG,UAAWgW,EAAW,EACnD,QAAQ,IAAIhW,EAAQ,OAAQA,CAAM,CAC3C,CACA,SAASoa,GAAInd,EAAO,CAClBA,EAAQkb,GAAMlb,CAAK,EACnB,IAAM+C,EAASmY,GAAM,IAAI,EAGzB,OAFcuB,GAAS1Z,CAAM,EACR,IAAI,KAAKA,EAAQ/C,CAAK,IAEzC+C,EAAO,IAAI/C,CAAK,EAChBma,GAAQpX,EAAQ,MAAO/C,EAAOA,CAAK,GAE9B,IACT,CACA,SAASod,GAAMla,EAAKlD,EAAO,CACzBA,EAAQkb,GAAMlb,CAAK,EACnB,IAAM+C,EAASmY,GAAM,IAAI,EACnB,CAAE,IAAK6B,EAAM,IAAKM,CAAK,EAAIZ,GAAS1Z,CAAM,EAC5CiZ,EAASe,EAAK,KAAKha,EAAQG,CAAG,EAC7B8Y,EAIHsB,GAAkBva,EAAQga,EAAM7Z,CAAG,GAHnCA,EAAMgY,GAAMhY,CAAG,EACf8Y,EAASe,EAAK,KAAKha,EAAQG,CAAG,GAIhC,IAAMnD,EAAWsd,EAAK,KAAKta,EAAQG,CAAG,EACtC,OAAAH,EAAO,IAAIG,EAAKlD,CAAK,EAChBgc,EAEMrD,GAAW3Y,EAAOD,CAAQ,GACnCoa,GAAQpX,EAAQ,MAAOG,EAAKlD,EAAOD,CAAQ,EAF3Coa,GAAQpX,EAAQ,MAAOG,EAAKlD,CAAK,EAI5B,IACT,CACA,SAASud,GAAYra,EAAK,CACxB,IAAMH,EAASmY,GAAM,IAAI,EACnB,CAAE,IAAK6B,EAAM,IAAKM,CAAK,EAAIZ,GAAS1Z,CAAM,EAC5CiZ,EAASe,EAAK,KAAKha,EAAQG,CAAG,EAC7B8Y,EAIHsB,GAAkBva,EAAQga,EAAM7Z,CAAG,GAHnCA,EAAMgY,GAAMhY,CAAG,EACf8Y,EAASe,EAAK,KAAKha,EAAQG,CAAG,GAIhC,IAAMnD,EAAWsd,EAAOA,EAAK,KAAKta,EAAQG,CAAG,EAAI,OAC3C5B,EAASyB,EAAO,OAAOG,CAAG,EAChC,OAAI8Y,GACF7B,GAAQpX,EAAQ,SAAUG,EAAK,OAAQnD,CAAQ,EAE1CuB,CACT,CACA,SAASkc,IAAQ,CACf,IAAMza,EAASmY,GAAM,IAAI,EACnBuC,EAAW1a,EAAO,OAAS,EAC3BqX,EAAmB1C,GAAM3U,CAAM,EAAI,IAAI,IAAIA,CAAM,EAAI,IAAI,IAAIA,CAAM,EACnEzB,EAASyB,EAAO,MAAM,EAC5B,OAAI0a,GACFtD,GAAQpX,EAAQ,QAAS,OAAQ,OAAQqX,CAAS,EAE7C9Y,CACT,CACA,SAASoc,GAActC,EAAYwB,EAAW,CAC5C,OAAO,SAAiBve,EAAUsf,EAAS,CACzC,IAAMC,EAAW,KACX7a,EAAS6a,EACb,QAGIf,EAAY3B,GAAMnY,CAAM,EACxBia,EAAOJ,EAAYJ,GAAYpB,EAAamB,GAAaD,GAC/D,OAAClB,GAAcrB,GAAM8C,EAAW,UAAW9D,EAAW,EAC/ChW,EAAO,QAAQ,CAAC/C,EAAOkD,IACrB7E,EAAS,KAAKsf,EAASX,EAAKhd,CAAK,EAAGgd,EAAK9Z,CAAG,EAAG0a,CAAQ,CAC/D,CACH,CACF,CACA,SAASC,GAAqBC,EAAQ1C,EAAYwB,EAAW,CAC3D,OAAO,YAAY/X,EAAM,CACvB,IAAM9B,EAAS,KACb,QAGI8Z,EAAY3B,GAAMnY,CAAM,EACxBgb,EAAcrG,GAAMmF,CAAS,EAC7BmB,EAASF,IAAW,WAAaA,IAAW,OAAO,UAAYC,EAC/DE,EAAYH,IAAW,QAAUC,EACjCG,EAAgBnb,EAAO+a,CAAM,EAAE,GAAGjZ,CAAI,EACtCmY,EAAOJ,EAAYJ,GAAYpB,EAAamB,GAAaD,GAC/D,OAAClB,GAAcrB,GAAM8C,EAAW,UAAWoB,EAAYjF,GAAsBD,EAAW,EACjF,CAEL,MAAO,CACL,GAAM,CAAE,MAAA/Y,EAAO,KAAAme,CAAK,EAAID,EAAc,KAAK,EAC3C,OAAOC,EAAO,CAAE,MAAAne,EAAO,KAAAme,CAAK,EAAI,CAC9B,MAAOH,EAAS,CAAChB,EAAKhd,EAAM,CAAC,CAAC,EAAGgd,EAAKhd,EAAM,CAAC,CAAC,CAAC,EAAIgd,EAAKhd,CAAK,EAC7D,KAAAme,CACF,CACF,EAEA,CAAC,OAAO,QAAQ,GAAI,CAClB,OAAO,IACT,CACF,CACF,CACF,CACA,SAASC,GAAqBpE,EAAM,CAClC,OAAO,YAAYnV,EAAM,CACb,CACR,IAAM3B,EAAM2B,EAAK,CAAC,EAAI,WAAWA,EAAK,CAAC,CAAC,KAAO,GAC/C,QAAQ,KAAK,GAAG4T,GAAWuB,CAAI,CAAC,cAAc9W,CAAG,8BAA+BgY,GAAM,IAAI,CAAC,CAC7F,CACA,OAAOlB,IAAS,SAAW,GAAQ,IACrC,CACF,CACA,SAASqE,IAAyB,CAChC,IAAMC,EAA2B,CAC/B,IAAIpb,EAAK,CACP,OAAOyZ,GAAM,KAAMzZ,CAAG,CACxB,EACA,IAAI,MAAO,CACT,OAAOga,GAAK,IAAI,CAClB,EACA,IAAKD,GACL,IAAAE,GACA,IAAKC,GACL,OAAQG,GACR,MAAAC,GACA,QAASE,GAAc,GAAO,EAAK,CACrC,EACMa,EAA2B,CAC/B,IAAIrb,EAAK,CACP,OAAOyZ,GAAM,KAAMzZ,EAAK,GAAO,EAAI,CACrC,EACA,IAAI,MAAO,CACT,OAAOga,GAAK,IAAI,CAClB,EACA,IAAKD,GACL,IAAAE,GACA,IAAKC,GACL,OAAQG,GACR,MAAAC,GACA,QAASE,GAAc,GAAO,EAAI,CACpC,EACMc,EAA4B,CAChC,IAAItb,EAAK,CACP,OAAOyZ,GAAM,KAAMzZ,EAAK,EAAI,CAC9B,EACA,IAAI,MAAO,CACT,OAAOga,GAAK,KAAM,EAAI,CACxB,EACA,IAAIha,EAAK,CACP,OAAO+Z,GAAM,KAAK,KAAM/Z,EAAK,EAAI,CACnC,EACA,IAAKkb,GACH,KAEF,EACA,IAAKA,GACH,KAEF,EACA,OAAQA,GACN,QAEF,EACA,MAAOA,GACL,OAEF,EACA,QAASV,GAAc,GAAM,EAAK,CACpC,EACMe,EAAmC,CACvC,IAAIvb,EAAK,CACP,OAAOyZ,GAAM,KAAMzZ,EAAK,GAAM,EAAI,CACpC,EACA,IAAI,MAAO,CACT,OAAOga,GAAK,KAAM,EAAI,CACxB,EACA,IAAIha,EAAK,CACP,OAAO+Z,GAAM,KAAK,KAAM/Z,EAAK,EAAI,CACnC,EACA,IAAKkb,GACH,KAEF,EACA,IAAKA,GACH,KAEF,EACA,OAAQA,GACN,QAEF,EACA,MAAOA,GACL,OAEF,EACA,QAASV,GAAc,GAAM,EAAI,CACnC,EAEA,MADwB,CAAC,OAAQ,SAAU,UAAW,OAAO,QAAQ,EACrD,QAASI,GAAW,CAClCQ,EAAyBR,CAAM,EAAID,GAAqBC,EAAQ,GAAO,EAAK,EAC5EU,EAA0BV,CAAM,EAAID,GAAqBC,EAAQ,GAAM,EAAK,EAC5ES,EAAyBT,CAAM,EAAID,GAAqBC,EAAQ,GAAO,EAAI,EAC3EW,EAAiCX,CAAM,EAAID,GAAqBC,EAAQ,GAAM,EAAI,CACpF,CAAC,EACM,CACLQ,EACAE,EACAD,EACAE,CACF,CACF,CACA,GAAI,CAACC,GAAyBC,GAA0BC,GAAyBC,EAA+B,EAAoBR,GAAuB,EAC3J,SAASS,GAA4B1D,EAAYC,EAAS,CACxD,IAAML,EAAmBK,EAAUD,EAAayD,GAAkCD,GAA0BxD,EAAauD,GAA2BD,GACpJ,MAAO,CAAC3b,EAAQG,EAAK+C,IACf/C,IAAQ,iBACH,CAACkY,EACClY,IAAQ,iBACVkY,EACElY,IAAQ,UACVH,EAEF,QAAQ,IAAIyU,GAAOwD,EAAkB9X,CAAG,GAAKA,KAAOH,EAASiY,EAAmBjY,EAAQG,EAAK+C,CAAQ,CAEhH,CACA,IAAI8Y,GAA4B,CAC9B,IAAqBD,GAA4B,GAAO,EAAK,CAC/D,EACIE,GAA6B,CAC/B,IAAqBF,GAA4B,GAAM,EAAK,CAC9D,EACA,SAASxB,GAAkBva,EAAQga,EAAM7Z,EAAK,CAC5C,IAAM4Z,EAAS5B,GAAMhY,CAAG,EACxB,GAAI4Z,IAAW5Z,GAAO6Z,EAAK,KAAKha,EAAQ+Z,CAAM,EAAG,CAC/C,IAAM9C,EAAOhC,GAAUjV,CAAM,EAC7B,QAAQ,KAAK,YAAYiX,CAAI,kEAAkEA,IAAS,MAAQ,WAAa,EAAE,8JAA8J,CAC/R,CACF,CACA,IAAIyB,GAA8B,IAAI,QAClCD,GAAqC,IAAI,QACzCD,GAA8B,IAAI,QAClCD,GAAqC,IAAI,QAC7C,SAAS2D,GAAcC,EAAS,CAC9B,OAAQA,EAAS,CACf,IAAK,SACL,IAAK,QACH,MAAO,GACT,IAAK,MACL,IAAK,MACL,IAAK,UACL,IAAK,UACH,MAAO,GACT,QACE,MAAO,EACX,CACF,CACA,SAASC,GAAcnf,EAAO,CAC5B,OAAOA,EACL,UAEG,CAAC,OAAO,aAAaA,CAAK,EAAI,EAAIif,GAAcjH,GAAUhY,CAAK,CAAC,CACvE,CACA,SAAS6b,GAAU9Y,EAAQ,CACzB,OAAIA,GAAUA,EACZ,eAGOA,EAEFqc,GAAqBrc,EAAQ,GAAOqZ,GAAiB2C,GAA2BtD,EAAW,CACpG,CACA,SAASG,GAAS7Y,EAAQ,CACxB,OAAOqc,GAAqBrc,EAAQ,GAAMsZ,GAAkB2C,GAA4BzD,EAAW,CACrG,CACA,SAAS6D,GAAqBrc,EAAQqY,EAAYiE,EAAcC,EAAoBC,EAAU,CAC5F,GAAI,CAACzH,GAAS/U,CAAM,EAEhB,eAAQ,KAAK,kCAAkC,OAAOA,CAAM,CAAC,EAAE,EAE1DA,EAET,GAAIA,EACF,SAEG,EAAEqY,GAAcrY,EACnB,gBAGA,OAAOA,EAET,IAAMyc,EAAgBD,EAAS,IAAIxc,CAAM,EACzC,GAAIyc,EACF,OAAOA,EAET,IAAMC,EAAaN,GAAcpc,CAAM,EACvC,GAAI0c,IAAe,EACjB,OAAO1c,EAET,IAAM2c,EAAQ,IAAI,MAAM3c,EAAQ0c,IAAe,EAAIH,EAAqBD,CAAY,EACpF,OAAAE,EAAS,IAAIxc,EAAQ2c,CAAK,EACnBA,CACT,CACA,SAASxE,GAAM0C,EAAU,CACvB,OAAOA,GAAY1C,GAAM0C,EACvB,OAED,GAAKA,CACR,CACA,SAASjC,GAAMgE,EAAG,CAChB,MAAO,GAAQA,GAAKA,EAAE,YAAc,GACtC,CAGAvb,GAAM,WAAY,IAAMwI,EAAQ,EAGhCxI,GAAM,WAAa3E,GAAO6K,GAAS,KAAKA,GAAU7K,CAAE,CAAC,EAGrD2E,GAAM,QAAS,CAAC3E,EAAI,CAAE,cAAemgB,EAAgB,QAASlgB,CAAS,IAAM,CAACwD,EAAK7E,IAAa,CAC9F,IAAImQ,EAAYoR,EAAe1c,CAAG,EAM9B2c,EAAUjgB,GALD,IAAM,CACjB,IAAII,EACJ,OAAAwO,EAAW5P,GAAMoB,EAAQpB,CAAC,EACnBoB,CACT,EAC4B3B,CAAQ,EACpCqB,EAASmgB,CAAO,CAClB,CAAC,EAGDzb,GAAM,QAAS8R,EAAS,EAGxB9R,GAAM,OAAS3E,GAAO2C,GAAM3C,CAAE,CAAC,EAG/B2E,GAAM,OAAS3E,GAAO0L,GAAY1L,CAAE,CAAC,EAGrC2E,GAAM,OAAS3E,IACTA,EAAG,gBAEPA,EAAG,cAAgB4C,GAAayd,GAAoBrgB,CAAE,CAAC,GAChDA,EAAG,cACX,EACD,SAASqgB,GAAoBrgB,EAAI,CAC/B,IAAIsgB,EAAa,CAAC,EAClB,OAAAjU,GAAYrM,EAAKb,GAAM,CACjBA,EAAE,SACJmhB,EAAW,KAAKnhB,EAAE,OAAO,CAC7B,CAAC,EACMmhB,CACT,CAGA,IAAIC,GAAe,CAAC,EACpB,SAASC,GAAmBzf,EAAM,CAChC,OAAKwf,GAAaxf,CAAI,IACpBwf,GAAaxf,CAAI,EAAI,GAChB,EAAEwf,GAAaxf,CAAI,CAC5B,CACA,SAAS0f,GAAczgB,EAAIe,EAAM,CAC/B,OAAOsL,GAAYrM,EAAKsM,GAAY,CAClC,GAAIA,EAAQ,QAAUA,EAAQ,OAAOvL,CAAI,EACvC,MAAO,EACX,CAAC,CACH,CACA,SAAS2f,GAAU1gB,EAAIe,EAAM,CACtBf,EAAG,SACNA,EAAG,OAAS,CAAC,GACVA,EAAG,OAAOe,CAAI,IACjBf,EAAG,OAAOe,CAAI,EAAIyf,GAAmBzf,CAAI,EAC7C,CAGA4D,GAAM,KAAM,CAAC3E,EAAI,CAAE,QAASC,CAAS,IAAM,CAACc,EAAM0C,EAAM,OAAS,CAC/D,IAAIkd,EAAW,GAAG5f,CAAI,GAAG0C,EAAM,IAAIA,CAAG,GAAK,EAAE,GAC7C,OAAOmd,GAAuB5gB,EAAI2gB,EAAU1gB,EAAU,IAAM,CAC1D,IAAI6M,EAAO2T,GAAczgB,EAAIe,CAAI,EAC7B8f,EAAK/T,EAAOA,EAAK,OAAO/L,CAAI,EAAIyf,GAAmBzf,CAAI,EAC3D,OAAO0C,EAAM,GAAG1C,CAAI,IAAI8f,CAAE,IAAIpd,CAAG,GAAK,GAAG1C,CAAI,IAAI8f,CAAE,EACrD,CAAC,CACH,CAAC,EACDxO,GAAe,CAACE,EAAMC,IAAO,CACvBD,EAAK,QACPC,EAAG,MAAQD,EAAK,MAEpB,CAAC,EACD,SAASqO,GAAuB5gB,EAAI2gB,EAAU1gB,EAAUrB,EAAU,CAGhE,GAFKoB,EAAG,QACNA,EAAG,MAAQ,CAAC,GACVA,EAAG,MAAM2gB,CAAQ,EACnB,OAAO3gB,EAAG,MAAM2gB,CAAQ,EAC1B,IAAIG,EAASliB,EAAS,EACtB,OAAAoB,EAAG,MAAM2gB,CAAQ,EAAIG,EACrB7gB,EAAS,IAAM,CACb,OAAOD,EAAG,MAAM2gB,CAAQ,CAC1B,CAAC,EACMG,CACT,CAGAnc,GAAM,KAAO3E,GAAOA,CAAE,EAGtB+gB,GAAuB,QAAS,QAAS,OAAO,EAChDA,GAAuB,UAAW,UAAW,SAAS,EACtD,SAASA,GAAuBhgB,EAAMigB,EAAWC,EAAM,CACrDtc,GAAMqc,EAAYhhB,GAAOkL,GAAK,mBAAmB8V,CAAS,mCAAmCjgB,CAAI,+CAA+CkgB,CAAI,GAAIjhB,CAAE,CAAC,CAC7J,CAGA0H,GAAU,YAAa,CAAC1H,EAAI,CAAE,WAAAmF,CAAW,EAAG,CAAE,OAAQmE,EAAS,cAAe6W,EAAgB,QAASlgB,CAAS,IAAM,CACpH,IAAIsG,EAAO4Z,EAAehb,CAAU,EAChCuQ,EAAW,IAAM,CACnB,IAAI7T,EACJ,OAAA0E,EAAMpH,GAAM0C,EAAS1C,CAAC,EACf0C,CACT,EACIqf,EAAmBf,EAAe,GAAGhb,CAAU,kBAAkB,EACjEwQ,EAAY/R,GAAQsd,EAAiB,IAAM,CAC/C,EAAG,CAAE,MAAO,CAAE,cAAiBtd,CAAI,CAAE,CAAC,EAClCS,EAAeqR,EAAS,EAC5BC,EAAStR,CAAY,EACrB,eAAe,IAAM,CACnB,GAAI,CAACrE,EAAG,SACN,OACFA,EAAG,wBAAwB,QAAW,EACtC,IAAIwV,EAAWxV,EAAG,SAAS,IACvByV,EAAWzV,EAAG,SAAS,IACvBmhB,EAAsB5L,GACxB,CACE,KAAM,CACJ,OAAOC,EAAS,CAClB,EACA,IAAIjV,EAAO,CACTkV,EAASlV,CAAK,CAChB,CACF,EACA,CACE,KAAM,CACJ,OAAOmV,EAAS,CAClB,EACA,IAAInV,EAAO,CACToV,EAASpV,CAAK,CAChB,CACF,CACF,EACAN,EAASkhB,CAAmB,CAC9B,CAAC,CACH,CAAC,EAGDzZ,GAAU,WAAY,CAAC1H,EAAI,CAAE,UAAAsK,EAAW,WAAAnF,CAAW,EAAG,CAAE,QAASlF,CAAS,IAAM,CAC1ED,EAAG,QAAQ,YAAY,IAAM,YAC/BkL,GAAK,kDAAmDlL,CAAE,EAC5D,IAAIsD,EAAS8d,GAAUjc,CAAU,EAC7Bkc,EAASrhB,EAAG,QAAQ,UAAU,EAAI,EAAE,kBACxCA,EAAG,YAAcqhB,EACjBA,EAAO,gBAAkBrhB,EACzBA,EAAG,aAAa,yBAA0B,EAAI,EAC9CqhB,EAAO,aAAa,uBAAwB,EAAI,EAC5CrhB,EAAG,kBACLA,EAAG,iBAAiB,QAASshB,GAAc,CACzCD,EAAO,iBAAiBC,EAAYjc,GAAM,CACxCA,EAAE,gBAAgB,EAClBrF,EAAG,cAAc,IAAIqF,EAAE,YAAYA,EAAE,KAAMA,CAAC,CAAC,CAC/C,CAAC,CACH,CAAC,EAEHvC,GAAeue,EAAQ,CAAC,EAAGrhB,CAAE,EAC7B,IAAIuhB,EAAa,CAACC,EAAQC,EAASC,IAAe,CAC5CA,EAAW,SAAS,SAAS,EAC/BD,EAAQ,WAAW,aAAaD,EAAQC,CAAO,EACtCC,EAAW,SAAS,QAAQ,EACrCD,EAAQ,WAAW,aAAaD,EAAQC,EAAQ,WAAW,EAE3DA,EAAQ,YAAYD,CAAM,CAE9B,EACA5f,GAAU,IAAM,CACd2f,EAAWF,EAAQ/d,EAAQgH,CAAS,EACpC4H,GAAgB,IAAM,CACpB5G,GAAS+V,CAAM,CACjB,CAAC,EAAE,CACL,CAAC,EACDrhB,EAAG,mBAAqB,IAAM,CAC5B,IAAIyhB,EAAUL,GAAUjc,CAAU,EAClCvD,GAAU,IAAM,CACd2f,EAAWvhB,EAAG,YAAayhB,EAASnX,CAAS,CAC/C,CAAC,CACH,EACArK,EACE,IAAM2B,GAAU,IAAM,CACpByf,EAAO,OAAO,EACd9V,GAAY8V,CAAM,CACpB,CAAC,CACH,CACF,CAAC,EACD,IAAIM,GAA+B,SAAS,cAAc,KAAK,EAC/D,SAASP,GAAUjc,EAAY,CAC7B,IAAI7B,EAAS4O,GAAgB,IACpB,SAAS,cAAc/M,CAAU,EACvC,IACMwc,EACR,EAAE,EACH,OAAKre,GACH4H,GAAK,iDAAiD/F,CAAU,GAAG,EAC9D7B,CACT,CAGA,IAAIse,GAAU,IAAM,CACpB,EACAA,GAAQ,OAAS,CAAC5hB,EAAI,CAAE,UAAAsK,CAAU,EAAG,CAAE,QAASrK,CAAS,IAAM,CAC7DqK,EAAU,SAAS,MAAM,EAAItK,EAAG,cAAgB,GAAOA,EAAG,UAAY,GACtEC,EAAS,IAAM,CACbqK,EAAU,SAAS,MAAM,EAAI,OAAOtK,EAAG,cAAgB,OAAOA,EAAG,SACnE,CAAC,CACH,EACA0H,GAAU,SAAUka,EAAO,EAG3Bla,GAAU,SAAUwK,GAAgB,CAAClS,EAAI,CAAE,WAAAmF,CAAW,EAAG,CAAE,OAAQmE,CAAQ,IAAM,CAC/EA,EAAQzD,GAAc7F,EAAImF,CAAU,CAAC,CACvC,CAAC,CAAC,EAGF,SAAS0c,GAAG7hB,EAAI8hB,EAAOxX,EAAW1L,EAAU,CAC1C,IAAImjB,EAAiB/hB,EACjB0J,EAAYrE,GAAMzG,EAASyG,CAAC,EAC5BqU,EAAU,CAAC,EACXsI,EAAc,CAAC/O,EAAWgP,IAAa5c,GAAM4c,EAAQhP,EAAW5N,CAAC,EAarE,GAZIiF,EAAU,SAAS,KAAK,IAC1BwX,EAAQI,GAAUJ,CAAK,GACrBxX,EAAU,SAAS,OAAO,IAC5BwX,EAAQK,GAAWL,CAAK,GACtBxX,EAAU,SAAS,SAAS,IAC9BoP,EAAQ,QAAU,IAChBpP,EAAU,SAAS,SAAS,IAC9BoP,EAAQ,QAAU,IAChBpP,EAAU,SAAS,QAAQ,IAC7ByX,EAAiB,QACfzX,EAAU,SAAS,UAAU,IAC/ByX,EAAiB,UACfzX,EAAU,SAAS,UAAU,EAAG,CAClC,IAAI8X,EAAe9X,EAAUA,EAAU,QAAQ,UAAU,EAAI,CAAC,GAAK,eAC/D2K,EAAOoN,GAAUD,EAAa,MAAM,IAAI,EAAE,CAAC,CAAC,EAAI,OAAOA,EAAa,MAAM,IAAI,EAAE,CAAC,CAAC,EAAI,IAC1F1Y,EAAWsL,GAAStL,EAAUuL,CAAI,CACpC,CACA,GAAI3K,EAAU,SAAS,UAAU,EAAG,CAClC,IAAI8X,EAAe9X,EAAUA,EAAU,QAAQ,UAAU,EAAI,CAAC,GAAK,eAC/D2K,EAAOoN,GAAUD,EAAa,MAAM,IAAI,EAAE,CAAC,CAAC,EAAI,OAAOA,EAAa,MAAM,IAAI,EAAE,CAAC,CAAC,EAAI,IAC1F1Y,EAAW0L,GAAS1L,EAAUuL,CAAI,CACpC,CACA,OAAI3K,EAAU,SAAS,SAAS,IAC9BZ,EAAWsY,EAAYtY,EAAU,CAAC4Y,EAAMjd,IAAM,CAC5CA,EAAE,eAAe,EACjBid,EAAKjd,CAAC,CACR,CAAC,GACCiF,EAAU,SAAS,MAAM,IAC3BZ,EAAWsY,EAAYtY,EAAU,CAAC4Y,EAAMjd,IAAM,CAC5CA,EAAE,gBAAgB,EAClBid,EAAKjd,CAAC,CACR,CAAC,GACCiF,EAAU,SAAS,MAAM,IAC3BZ,EAAWsY,EAAYtY,EAAU,CAAC4Y,EAAMjd,IAAM,CAC5Cid,EAAKjd,CAAC,EACN0c,EAAe,oBAAoBD,EAAOpY,EAAUgQ,CAAO,CAC7D,CAAC,IAECpP,EAAU,SAAS,MAAM,GAAKA,EAAU,SAAS,SAAS,KAC5DyX,EAAiB,SACjBrY,EAAWsY,EAAYtY,EAAU,CAAC4Y,EAAMjd,IAAM,CACxCrF,EAAG,SAASqF,EAAE,MAAM,GAEpBA,EAAE,OAAO,cAAgB,KAEzBrF,EAAG,YAAc,GAAKA,EAAG,aAAe,GAExCA,EAAG,aAAe,IAEtBsiB,EAAKjd,CAAC,EACR,CAAC,GAECiF,EAAU,SAAS,MAAM,IAC3BZ,EAAWsY,EAAYtY,EAAU,CAAC4Y,EAAMjd,IAAM,CAC5CA,EAAE,SAAWrF,GAAMsiB,EAAKjd,CAAC,CAC3B,CAAC,IACCkd,GAAWT,CAAK,GAAKU,GAAaV,CAAK,KACzCpY,EAAWsY,EAAYtY,EAAU,CAAC4Y,EAAMjd,IAAM,CACxCod,GAA+Cpd,EAAGiF,CAAS,GAG/DgY,EAAKjd,CAAC,CACR,CAAC,GAEH0c,EAAe,iBAAiBD,EAAOpY,EAAUgQ,CAAO,EACjD,IAAM,CACXqI,EAAe,oBAAoBD,EAAOpY,EAAUgQ,CAAO,CAC7D,CACF,CACA,SAASwI,GAAU5a,EAAS,CAC1B,OAAOA,EAAQ,QAAQ,KAAM,GAAG,CAClC,CACA,SAAS6a,GAAW7a,EAAS,CAC3B,OAAOA,EAAQ,YAAY,EAAE,QAAQ,SAAU,CAAC0K,EAAOuC,IAASA,EAAK,YAAY,CAAC,CACpF,CACA,SAAS8N,GAAU/a,EAAS,CAC1B,MAAO,CAAC,MAAM,QAAQA,CAAO,GAAK,CAAC,MAAMA,CAAO,CAClD,CACA,SAASob,GAAWpb,EAAS,CAC3B,MAAI,CAAC,IAAK,GAAG,EAAE,SACbA,CACF,EACSA,EACFA,EAAQ,QAAQ,kBAAmB,OAAO,EAAE,QAAQ,QAAS,GAAG,EAAE,YAAY,CACvF,CACA,SAASib,GAAWT,EAAO,CACzB,MAAO,CAAC,UAAW,OAAO,EAAE,SAASA,CAAK,CAC5C,CACA,SAASU,GAAaV,EAAO,CAC3B,MAAO,CAAC,cAAe,QAAS,OAAO,EAAE,KAAM3iB,GAAM2iB,EAAM,SAAS3iB,CAAC,CAAC,CACxE,CACA,SAASsjB,GAA+Cpd,EAAGiF,EAAW,CACpE,IAAIqY,EAAerY,EAAU,OAAQnL,GAC5B,CAAC,CAAC,SAAU,WAAY,UAAW,OAAQ,OAAQ,UAAW,OAAQ,OAAQ,UAAW,UAAW,iBAAiB,EAAE,SAASA,CAAC,CACzI,EACD,GAAIwjB,EAAa,SAAS,UAAU,EAAG,CACrC,IAAIC,EAAgBD,EAAa,QAAQ,UAAU,EACnDA,EAAa,OAAOC,EAAeP,IAAWM,EAAaC,EAAgB,CAAC,GAAK,gBAAgB,MAAM,IAAI,EAAE,CAAC,CAAC,EAAI,EAAI,CAAC,CAC1H,CACA,GAAID,EAAa,SAAS,UAAU,EAAG,CACrC,IAAIC,EAAgBD,EAAa,QAAQ,UAAU,EACnDA,EAAa,OAAOC,EAAeP,IAAWM,EAAaC,EAAgB,CAAC,GAAK,gBAAgB,MAAM,IAAI,EAAE,CAAC,CAAC,EAAI,EAAI,CAAC,CAC1H,CAGA,GAFID,EAAa,SAAW,GAExBA,EAAa,SAAW,GAAKE,GAAexd,EAAE,GAAG,EAAE,SAASsd,EAAa,CAAC,CAAC,EAC7E,MAAO,GAET,IAAMG,EADqB,CAAC,OAAQ,QAAS,MAAO,OAAQ,MAAO,OAAO,EACpB,OAAQC,GAAaJ,EAAa,SAASI,CAAQ,CAAC,EAE1G,OADAJ,EAAeA,EAAa,OAAQxjB,GAAM,CAAC2jB,EAA2B,SAAS3jB,CAAC,CAAC,EAC7E,EAAA2jB,EAA2B,OAAS,GACFA,EAA2B,OAAQC,KACjEA,IAAa,OAASA,IAAa,WACrCA,EAAW,QACN1d,EAAE,GAAG0d,CAAQ,KAAK,EAC1B,EAC+B,SAAWD,EAA2B,SAChEN,GAAand,EAAE,IAAI,GAEnBwd,GAAexd,EAAE,GAAG,EAAE,SAASsd,EAAa,CAAC,CAAC,GAKxD,CACA,SAASE,GAAepf,EAAK,CAC3B,GAAI,CAACA,EACH,MAAO,CAAC,EACVA,EAAMif,GAAWjf,CAAG,EACpB,IAAIuf,EAAmB,CACrB,KAAQ,UACR,MAAS,IACT,MAAS,IACT,SAAY,IACZ,IAAO,OACP,IAAO,SACP,GAAM,WACN,KAAQ,aACR,KAAQ,aACR,MAAS,cACT,OAAU,IACV,MAAS,IACT,MAAS,IACT,MAAS,IACT,WAAc,GAChB,EACA,OAAAA,EAAiBvf,CAAG,EAAIA,EACjB,OAAO,KAAKuf,CAAgB,EAAE,IAAKD,GAAa,CACrD,GAAIC,EAAiBD,CAAQ,IAAMtf,EACjC,OAAOsf,CACX,CAAC,EAAE,OAAQA,GAAaA,CAAQ,CAClC,CAGArb,GAAU,QAAS,CAAC1H,EAAI,CAAE,UAAAsK,EAAW,WAAAnF,CAAW,EAAG,CAAE,OAAQmE,EAAS,QAASrJ,CAAS,IAAM,CAC5F,IAAIgjB,EAAcjjB,EACdsK,EAAU,SAAS,QAAQ,IAC7B2Y,EAAcjjB,EAAG,YAEnB,IAAIkjB,EAAcrd,GAAcod,EAAa9d,CAAU,EACnDge,EACA,OAAOhe,GAAe,SACxBge,EAActd,GAAcod,EAAa,GAAG9d,CAAU,kBAAkB,EAC/D,OAAOA,GAAe,YAAc,OAAOA,EAAW,GAAM,SACrEge,EAActd,GAAcod,EAAa,GAAG9d,EAAW,CAAC,kBAAkB,EAE1Ege,EAAc,IAAM,CACpB,EAEF,IAAIC,EAAW,IAAM,CACnB,IAAIvhB,EACJ,OAAAqhB,EAAa3iB,GAAUsB,EAAStB,CAAK,EAC9B8iB,GAAexhB,CAAM,EAAIA,EAAO,IAAI,EAAIA,CACjD,EACIyhB,EAAY/iB,GAAU,CACxB,IAAIsB,EACJqhB,EAAaxU,GAAW7M,EAAS6M,CAAM,EACnC2U,GAAexhB,CAAM,EACvBA,EAAO,IAAItB,CAAK,EAEhB4iB,EAAY,IAAM,CAClB,EAAG,CACD,MAAO,CAAE,cAAiB5iB,CAAM,CAClC,CAAC,CAEL,EACI,OAAO4E,GAAe,UAAYnF,EAAG,OAAS,SAChD4B,GAAU,IAAM,CACT5B,EAAG,aAAa,MAAM,GACzBA,EAAG,aAAa,OAAQmF,CAAU,CACtC,CAAC,EAEH,IAAI2c,EAAQ9hB,EAAG,QAAQ,YAAY,IAAM,UAAY,CAAC,WAAY,OAAO,EAAE,SAASA,EAAG,IAAI,GAAKsK,EAAU,SAAS,MAAM,EAAI,SAAW,QACpIiZ,EAAiBtR,GAAY,IAAM,CACvC,EAAI4P,GAAG7hB,EAAI8hB,EAAOxX,EAAYjF,GAAM,CAClCie,EAASE,GAAcxjB,EAAIsK,EAAWjF,EAAG+d,EAAS,CAAC,CAAC,CACtD,CAAC,EAYD,GAXI9Y,EAAU,SAAS,MAAM,IACvB,CAAC,OAAQ,KAAM,EAAE,EAAE,SAAS8Y,EAAS,CAAC,GAAKvP,GAAW7T,CAAE,GAAK,MAAM,QAAQojB,EAAS,CAAC,GAAKpjB,EAAG,QAAQ,YAAY,IAAM,UAAYA,EAAG,WACxIsjB,EACEE,GAAcxjB,EAAIsK,EAAW,CAAE,OAAQtK,CAAG,EAAGojB,EAAS,CAAC,CACzD,EAGCpjB,EAAG,0BACNA,EAAG,wBAA0B,CAAC,GAChCA,EAAG,wBAAwB,QAAaujB,EACxCtjB,EAAS,IAAMD,EAAG,wBAAwB,QAAW,CAAC,EAClDA,EAAG,KAAM,CACX,IAAIyjB,EAAsB5B,GAAG7hB,EAAG,KAAM,QAAS,CAAC,EAAIqF,GAAM,CACxD8H,GAAS,IAAMnN,EAAG,UAAYA,EAAG,SAAS,IAAIwjB,GAAcxjB,EAAIsK,EAAW,CAAE,OAAQtK,CAAG,EAAGojB,EAAS,CAAC,CAAC,CAAC,CACzG,CAAC,EACDnjB,EAAS,IAAMwjB,EAAoB,CAAC,CACtC,CACAzjB,EAAG,SAAW,CACZ,KAAM,CACJ,OAAOojB,EAAS,CAClB,EACA,IAAI7iB,EAAO,CACT+iB,EAAS/iB,CAAK,CAChB,CACF,EACAP,EAAG,oBAAuBO,GAAU,CAC9BA,IAAU,QAAU,OAAO4E,GAAe,UAAYA,EAAW,MAAM,IAAI,IAC7E5E,EAAQ,IACV,OAAO,UAAY,GACnBqB,GAAU,IAAMuR,GAAKnT,EAAI,QAASO,CAAK,CAAC,EACxC,OAAO,OAAO,SAChB,EACA+I,EAAQ,IAAM,CACZ,IAAI/I,EAAQ6iB,EAAS,EACjB9Y,EAAU,SAAS,aAAa,GAAK,SAAS,cAAc,WAAWtK,CAAE,GAE7EA,EAAG,oBAAoBO,CAAK,CAC9B,CAAC,CACH,CAAC,EACD,SAASijB,GAAcxjB,EAAIsK,EAAWwX,EAAO4B,EAAc,CACzD,OAAO9hB,GAAU,IAAM,CACrB,GAAIkgB,aAAiB,aAAeA,EAAM,SAAW,OACnD,OAAOA,EAAM,SAAW,MAAQA,EAAM,SAAW,OAASA,EAAM,OAASA,EAAM,OAAO,MACnF,GAAIjO,GAAW7T,CAAE,EACpB,GAAI,MAAM,QAAQ0jB,CAAY,EAAG,CAC/B,IAAI3Z,EAAW,KACf,OAAIO,EAAU,SAAS,QAAQ,EAC7BP,EAAW4Z,GAAgB7B,EAAM,OAAO,KAAK,EACpCxX,EAAU,SAAS,SAAS,EACrCP,EAAW4J,GAAiBmO,EAAM,OAAO,KAAK,EAE9C/X,EAAW+X,EAAM,OAAO,MAEnBA,EAAM,OAAO,QAAU4B,EAAa,SAAS3Z,CAAQ,EAAI2Z,EAAeA,EAAa,OAAO,CAAC3Z,CAAQ,CAAC,EAAI2Z,EAAa,OAAQ1Y,GAAQ,CAAC4Y,GAAyB5Y,EAAKjB,CAAQ,CAAC,CACxL,KACE,QAAO+X,EAAM,OAAO,YAEjB,IAAI9hB,EAAG,QAAQ,YAAY,IAAM,UAAYA,EAAG,SACrD,OAAIsK,EAAU,SAAS,QAAQ,EACtB,MAAM,KAAKwX,EAAM,OAAO,eAAe,EAAE,IAAKxN,GAAW,CAC9D,IAAIvC,EAAWuC,EAAO,OAASA,EAAO,KACtC,OAAOqP,GAAgB5R,CAAQ,CACjC,CAAC,EACQzH,EAAU,SAAS,SAAS,EAC9B,MAAM,KAAKwX,EAAM,OAAO,eAAe,EAAE,IAAKxN,GAAW,CAC9D,IAAIvC,EAAWuC,EAAO,OAASA,EAAO,KACtC,OAAOX,GAAiB5B,CAAQ,CAClC,CAAC,EAEI,MAAM,KAAK+P,EAAM,OAAO,eAAe,EAAE,IAAKxN,GAC5CA,EAAO,OAASA,EAAO,IAC/B,EACI,CACL,IAAIvK,EAUJ,OATI2J,GAAQ1T,CAAE,EACR8hB,EAAM,OAAO,QACf/X,EAAW+X,EAAM,OAAO,MAExB/X,EAAW2Z,EAGb3Z,EAAW+X,EAAM,OAAO,MAEtBxX,EAAU,SAAS,QAAQ,EACtBqZ,GAAgB5Z,CAAQ,EACtBO,EAAU,SAAS,SAAS,EAC9BqJ,GAAiB5J,CAAQ,EACvBO,EAAU,SAAS,MAAM,EAC3BP,EAAS,KAAK,EAEdA,CAEX,EACF,CAAC,CACH,CACA,SAAS4Z,GAAgB5R,EAAU,CACjC,IAAI8R,EAAS9R,EAAW,WAAWA,CAAQ,EAAI,KAC/C,OAAO+R,GAAWD,CAAM,EAAIA,EAAS9R,CACvC,CACA,SAAS6R,GAAyBpP,EAAQC,EAAQ,CAChD,OAAOD,GAAUC,CACnB,CACA,SAASqP,GAAWxc,EAAS,CAC3B,MAAO,CAAC,MAAM,QAAQA,CAAO,GAAK,CAAC,MAAMA,CAAO,CAClD,CACA,SAAS+b,GAAe9iB,EAAO,CAC7B,OAAOA,IAAU,MAAQ,OAAOA,GAAU,UAAY,OAAOA,EAAM,KAAQ,YAAc,OAAOA,EAAM,KAAQ,UAChH,CAGAmH,GAAU,QAAU1H,GAAO,eAAe,IAAM4B,GAAU,IAAM5B,EAAG,gBAAgBqH,GAAO,OAAO,CAAC,CAAC,CAAC,CAAC,EAGrG8E,GAAgB,IAAM,IAAI9E,GAAO,MAAM,CAAC,GAAG,EAC3CK,GAAU,OAAQwK,GAAgB,CAAClS,EAAI,CAAE,WAAAmF,CAAW,EAAG,CAAE,SAAU4J,CAAU,IACvE,OAAO5J,GAAe,SACjB,CAAC,CAACA,EAAW,KAAK,GAAK4J,EAAU5J,EAAY,CAAC,EAAG,EAAK,EAExD4J,EAAU5J,EAAY,CAAC,EAAG,EAAK,CACvC,CAAC,EAGFuC,GAAU,OAAQ,CAAC1H,EAAI,CAAE,WAAAmF,CAAW,EAAG,CAAE,OAAQmE,EAAS,cAAe6W,CAAe,IAAM,CAC5F,IAAIpR,EAAYoR,EAAehb,CAAU,EACzCmE,EAAQ,IAAM,CACZyF,EAAWxO,GAAU,CACnBqB,GAAU,IAAM,CACd5B,EAAG,YAAcO,CACnB,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC,EAGDmH,GAAU,OAAQ,CAAC1H,EAAI,CAAE,WAAAmF,CAAW,EAAG,CAAE,OAAQmE,EAAS,cAAe6W,CAAe,IAAM,CAC5F,IAAIpR,EAAYoR,EAAehb,CAAU,EACzCmE,EAAQ,IAAM,CACZyF,EAAWxO,GAAU,CACnBqB,GAAU,IAAM,CACd5B,EAAG,UAAYO,EACfP,EAAG,cAAgB,GACnBsL,GAAStL,CAAE,EACX,OAAOA,EAAG,aACZ,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC,EAGDkK,GAAcN,GAAa,IAAKE,GAAKzC,GAAO,OAAO,CAAC,CAAC,CAAC,EACtD,IAAI0c,GAAW,CAAC/jB,EAAI,CAAE,MAAAO,EAAO,UAAA+J,EAAW,WAAAnF,EAAY,SAAAoF,CAAS,EAAG,CAAE,OAAQjB,EAAS,QAASrJ,CAAS,IAAM,CACzG,GAAI,CAACM,EAAO,CACV,IAAIyjB,EAAmB,CAAC,EACxBjN,GAAuBiN,CAAgB,EACrBne,GAAc7F,EAAImF,CAAU,EACjCyR,GAAa,CACxBE,GAAoB9W,EAAI4W,EAAUrM,CAAQ,CAC5C,EAAG,CAAE,MAAOyZ,CAAiB,CAAC,EAC9B,MACF,CACA,GAAIzjB,IAAU,MACZ,OAAO0jB,GAAgBjkB,EAAImF,CAAU,EACvC,GAAInF,EAAG,mBAAqBA,EAAG,kBAAkBO,CAAK,GAAKP,EAAG,kBAAkBO,CAAK,EAAE,QACrF,OAEF,IAAIwO,EAAYlJ,GAAc7F,EAAImF,CAAU,EAC5CmE,EAAQ,IAAMyF,EAAWlN,GAAW,CAC9BA,IAAW,QAAU,OAAOsD,GAAe,UAAYA,EAAW,MAAM,IAAI,IAC9EtD,EAAS,IAEXD,GAAU,IAAMuR,GAAKnT,EAAIO,EAAOsB,EAAQyI,CAAS,CAAC,CACpD,CAAC,CAAC,EACFrK,EAAS,IAAM,CACbD,EAAG,qBAAuBA,EAAG,oBAAoB,EACjDA,EAAG,oBAAsBA,EAAG,mBAAmB,CACjD,CAAC,CACH,EACA+jB,GAAS,OAAS,CAAC/jB,EAAI,CAAE,MAAAO,EAAO,UAAA+J,EAAW,WAAAnF,CAAW,IAAM,CACrD5E,IAEAP,EAAG,oBACNA,EAAG,kBAAoB,CAAC,GAC1BA,EAAG,kBAAkBO,CAAK,EAAI,CAAE,WAAA4E,EAAY,QAAS,EAAM,EAC7D,EACAuC,GAAU,OAAQqc,EAAQ,EAC1B,SAASE,GAAgBjkB,EAAImF,EAAY,CACvCnF,EAAG,iBAAmBmF,CACxB,CAGA8G,GAAgB,IAAM,IAAI5E,GAAO,MAAM,CAAC,GAAG,EAC3CK,GAAU,OAAQ,CAAC1H,EAAI,CAAE,WAAAmF,CAAW,EAAG,CAAE,QAASlF,CAAS,IAAM,CAC/D,GAAIikB,GAAqClkB,CAAE,EACzC,OACFmF,EAAaA,IAAe,GAAK,KAAOA,EACxC,IAAIgf,EAAe,CAAC,EACpBvf,GAAauf,EAAcnkB,CAAE,EAC7B,IAAIokB,EAAsB,CAAC,EAC3BjN,GAAoBiN,EAAqBD,CAAY,EACrD,IAAIphB,EAAQ4C,GAAS3F,EAAImF,EAAY,CAAE,MAAOif,CAAoB,CAAC,GAC/DrhB,IAAU,QAAUA,IAAU,MAChCA,EAAQ,CAAC,GACX6B,GAAa7B,EAAO/C,CAAE,EACtB,IAAIqkB,EAAejlB,GAAS2D,CAAK,EACjCW,GAAiB2gB,CAAY,EAC7B,IAAIC,EAAOxhB,GAAe9C,EAAIqkB,CAAY,EAC1CA,EAAa,MAAW1e,GAAS3F,EAAIqkB,EAAa,IAAO,EACzDpkB,EAAS,IAAM,CACbokB,EAAa,SAAc1e,GAAS3F,EAAIqkB,EAAa,OAAU,EAC/DC,EAAK,CACP,CAAC,CACH,CAAC,EACDjS,GAAe,CAACE,EAAMC,IAAO,CACvBD,EAAK,eACPC,EAAG,aAAeD,EAAK,aACvBC,EAAG,aAAa,wBAAyB,EAAI,EAEjD,CAAC,EACD,SAAS0R,GAAqClkB,EAAI,CAChD,OAAKiS,GAEDS,GACK,GACF1S,EAAG,aAAa,uBAAuB,EAHrC,EAIX,CAGA0H,GAAU,OAAQ,CAAC1H,EAAI,CAAE,UAAAsK,EAAW,WAAAnF,CAAW,EAAG,CAAE,OAAQmE,CAAQ,IAAM,CACxE,IAAIyF,EAAYlJ,GAAc7F,EAAImF,CAAU,EACvCnF,EAAG,YACNA,EAAG,UAAY,IAAM,CACnB4B,GAAU,IAAM,CACd5B,EAAG,MAAM,YAAY,UAAW,OAAQsK,EAAU,SAAS,WAAW,EAAI,YAAc,MAAM,CAChG,CAAC,CACH,GACGtK,EAAG,YACNA,EAAG,UAAY,IAAM,CACnB4B,GAAU,IAAM,CACV5B,EAAG,MAAM,SAAW,GAAKA,EAAG,MAAM,UAAY,OAChDA,EAAG,gBAAgB,OAAO,EAE1BA,EAAG,MAAM,eAAe,SAAS,CAErC,CAAC,CACH,GACF,IAAIyQ,EAAO,IAAM,CACfzQ,EAAG,UAAU,EACbA,EAAG,WAAa,EAClB,EACIwQ,EAAO,IAAM,CACfxQ,EAAG,UAAU,EACbA,EAAG,WAAa,EAClB,EACI2Q,EAA0B,IAAM,WAAWH,CAAI,EAC/C+T,EAAS3V,GACVrO,GAAUA,EAAQiQ,EAAK,EAAIC,EAAK,EAChClQ,GAAU,CACL,OAAOP,EAAG,oCAAuC,WACnDA,EAAG,mCAAmCA,EAAIO,EAAOiQ,EAAMC,CAAI,EAE3DlQ,EAAQoQ,EAAwB,EAAIF,EAAK,CAE7C,CACF,EACInQ,EACAD,EAAY,GAChBiJ,EAAQ,IAAMyF,EAAWxO,GAAU,CAC7B,CAACF,GAAaE,IAAUD,IAExBgK,EAAU,SAAS,WAAW,IAChC/J,EAAQoQ,EAAwB,EAAIF,EAAK,GAC3C8T,EAAOhkB,CAAK,EACZD,EAAWC,EACXF,EAAY,GACd,CAAC,CAAC,CACJ,CAAC,EAGDqH,GAAU,MAAO,CAAC1H,EAAI,CAAE,WAAAmF,CAAW,EAAG,CAAE,OAAQmE,EAAS,QAASrJ,CAAS,IAAM,CAC/E,IAAIukB,EAAgBC,GAAmBtf,CAAU,EAC7Cuf,EAAgB7e,GAAc7F,EAAIwkB,EAAc,KAAK,EACrDG,EAAc9e,GAChB7F,EAEAA,EAAG,kBAAoB,OACzB,EACAA,EAAG,YAAc,CAAC,EAClBA,EAAG,UAAY,CAAC,EAChBsJ,EAAQ,IAAMsb,GAAK5kB,EAAIwkB,EAAeE,EAAeC,CAAW,CAAC,EACjE1kB,EAAS,IAAM,CACb,OAAO,OAAOD,EAAG,SAAS,EAAE,QAASgL,GAAQpJ,GAC3C,IAAM,CACJ2J,GAAYP,CAAG,EACfA,EAAI,OAAO,CACb,CACF,CAAC,EACD,OAAOhL,EAAG,YACV,OAAOA,EAAG,SACZ,CAAC,CACH,CAAC,EACD,SAAS4kB,GAAK5kB,EAAIwkB,EAAeE,EAAeC,EAAa,CAC3D,IAAIhhB,EAAaxE,GAAM,OAAOA,GAAM,UAAY,CAAC,MAAM,QAAQA,CAAC,EAC5D0lB,EAAa7kB,EACjB0kB,EAAeI,GAAU,CACnBC,GAAWD,CAAK,GAAKA,GAAS,IAChCA,EAAQ,MAAM,KAAK,MAAMA,CAAK,EAAE,KAAK,EAAI3lB,GAAMA,EAAI,CAAC,GAElD2lB,IAAU,SACZA,EAAQ,CAAC,GACX,IAAIE,EAAShlB,EAAG,UACZilB,EAAWjlB,EAAG,YACdklB,EAAS,CAAC,EACVC,EAAO,CAAC,EACZ,GAAIxhB,EAAUmhB,CAAK,EACjBA,EAAQ,OAAO,QAAQA,CAAK,EAAE,IAAI,CAAC,CAACrhB,EAAKlD,CAAK,IAAM,CAClD,IAAIkG,EAAS2e,GAA2BZ,EAAejkB,EAAOkD,EAAKqhB,CAAK,EACxEH,EAAajW,GAAW,CAClByW,EAAK,SAASzW,CAAM,GACtBxD,GAAK,yBAA0BlL,CAAE,EACnCmlB,EAAK,KAAKzW,CAAM,CAClB,EAAG,CAAE,MAAO,CAAE,MAAOjL,EAAK,GAAGgD,CAAO,CAAE,CAAC,EACvCye,EAAO,KAAKze,CAAM,CACpB,CAAC,MAED,SAAStH,EAAI,EAAGA,EAAI2lB,EAAM,OAAQ3lB,IAAK,CACrC,IAAIsH,EAAS2e,GAA2BZ,EAAeM,EAAM3lB,CAAC,EAAGA,EAAG2lB,CAAK,EACzEH,EAAapkB,GAAU,CACjB4kB,EAAK,SAAS5kB,CAAK,GACrB2K,GAAK,yBAA0BlL,CAAE,EACnCmlB,EAAK,KAAK5kB,CAAK,CACjB,EAAG,CAAE,MAAO,CAAE,MAAOpB,EAAG,GAAGsH,CAAO,CAAE,CAAC,EACrCye,EAAO,KAAKze,CAAM,CACpB,CAEF,IAAI4e,EAAO,CAAC,EACRC,EAAQ,CAAC,EACTC,EAAU,CAAC,EACXC,EAAQ,CAAC,EACb,QAASrmB,EAAI,EAAGA,EAAI8lB,EAAS,OAAQ9lB,IAAK,CACxC,IAAIsE,EAAMwhB,EAAS9lB,CAAC,EAChBgmB,EAAK,QAAQ1hB,CAAG,IAAM,IACxB8hB,EAAQ,KAAK9hB,CAAG,CACpB,CACAwhB,EAAWA,EAAS,OAAQxhB,GAAQ,CAAC8hB,EAAQ,SAAS9hB,CAAG,CAAC,EAC1D,IAAIgiB,EAAU,WACd,QAAStmB,EAAI,EAAGA,EAAIgmB,EAAK,OAAQhmB,IAAK,CACpC,IAAIsE,EAAM0hB,EAAKhmB,CAAC,EACZumB,EAAYT,EAAS,QAAQxhB,CAAG,EACpC,GAAIiiB,IAAc,GAChBT,EAAS,OAAO9lB,EAAG,EAAGsE,CAAG,EACzB4hB,EAAK,KAAK,CAACI,EAAStmB,CAAC,CAAC,UACbumB,IAAcvmB,EAAG,CAC1B,IAAIwmB,EAAYV,EAAS,OAAO9lB,EAAG,CAAC,EAAE,CAAC,EACnCymB,EAAaX,EAAS,OAAOS,EAAY,EAAG,CAAC,EAAE,CAAC,EACpDT,EAAS,OAAO9lB,EAAG,EAAGymB,CAAU,EAChCX,EAAS,OAAOS,EAAW,EAAGC,CAAS,EACvCL,EAAM,KAAK,CAACK,EAAWC,CAAU,CAAC,CACpC,MACEJ,EAAM,KAAK/hB,CAAG,EAEhBgiB,EAAUhiB,CACZ,CACA,QAAStE,EAAI,EAAGA,EAAIomB,EAAQ,OAAQpmB,IAAK,CACvC,IAAIsE,EAAM8hB,EAAQpmB,CAAC,EACbsE,KAAOuhB,IAEbpjB,GAAU,IAAM,CACd2J,GAAYyZ,EAAOvhB,CAAG,CAAC,EACvBuhB,EAAOvhB,CAAG,EAAE,OAAO,CACrB,CAAC,EACD,OAAOuhB,EAAOvhB,CAAG,EACnB,CACA,QAAStE,EAAI,EAAGA,EAAImmB,EAAM,OAAQnmB,IAAK,CACrC,GAAI,CAACwmB,EAAWC,CAAU,EAAIN,EAAMnmB,CAAC,EACjC0mB,EAAWb,EAAOW,CAAS,EAC3BG,EAAYd,EAAOY,CAAU,EAC7BG,EAAS,SAAS,cAAc,KAAK,EACzCnkB,GAAU,IAAM,CACTkkB,GACH5a,GAAK,uCAAwC2Z,EAAYe,EAAYZ,CAAM,EAC7Ec,EAAU,MAAMC,CAAM,EACtBF,EAAS,MAAMC,CAAS,EACxBA,EAAU,gBAAkBA,EAAU,MAAMA,EAAU,cAAc,EACpEC,EAAO,OAAOF,CAAQ,EACtBA,EAAS,gBAAkBA,EAAS,MAAMA,EAAS,cAAc,EACjEE,EAAO,OAAO,CAChB,CAAC,EACDD,EAAU,oBAAoBZ,EAAOC,EAAK,QAAQS,CAAU,CAAC,CAAC,CAChE,CACA,QAASzmB,EAAI,EAAGA,EAAIkmB,EAAK,OAAQlmB,IAAK,CACpC,GAAI,CAAC6mB,EAAU/mB,CAAK,EAAIomB,EAAKlmB,CAAC,EAC1B8mB,EAASD,IAAa,WAAanB,EAAaG,EAAOgB,CAAQ,EAC/DC,EAAO,iBACTA,EAASA,EAAO,gBAClB,IAAIxf,EAASye,EAAOjmB,CAAK,EACrBwE,EAAM0hB,EAAKlmB,CAAK,EAChBoiB,EAAS,SAAS,WAAWwD,EAAW,QAAS,EAAI,EAAE,kBACvDqB,EAAgB9mB,GAASqH,CAAM,EACnC3D,GAAeue,EAAQ6E,EAAerB,CAAU,EAChDxD,EAAO,oBAAuB8E,GAAa,CACzC,OAAO,QAAQA,CAAQ,EAAE,QAAQ,CAAC,CAACrL,EAAMva,CAAK,IAAM,CAClD2lB,EAAcpL,CAAI,EAAIva,CACxB,CAAC,CACH,EACAqB,GAAU,IAAM,CACdqkB,EAAO,MAAM5E,CAAM,EACnBnP,GAAgB,IAAM5G,GAAS+V,CAAM,CAAC,EAAE,CAC1C,CAAC,EACG,OAAO5d,GAAQ,UACjByH,GAAK,mEAAoE2Z,CAAU,EAErFG,EAAOvhB,CAAG,EAAI4d,CAChB,CACA,QAASliB,EAAI,EAAGA,EAAIqmB,EAAM,OAAQrmB,IAChC6lB,EAAOQ,EAAMrmB,CAAC,CAAC,EAAE,oBAAoB+lB,EAAOC,EAAK,QAAQK,EAAMrmB,CAAC,CAAC,CAAC,CAAC,EAErE0lB,EAAW,YAAcM,CAC3B,CAAC,CACH,CACA,SAASV,GAAmBtf,EAAY,CACtC,IAAIihB,EAAgB,iCAChBC,EAAgB,iBAChBC,EAAa,qCACbC,EAAUphB,EAAW,MAAMmhB,CAAU,EACzC,GAAI,CAACC,EACH,OACF,IAAIlZ,EAAM,CAAC,EACXA,EAAI,MAAQkZ,EAAQ,CAAC,EAAE,KAAK,EAC5B,IAAIC,EAAOD,EAAQ,CAAC,EAAE,QAAQF,EAAe,EAAE,EAAE,KAAK,EAClDI,EAAgBD,EAAK,MAAMJ,CAAa,EAC5C,OAAIK,GACFpZ,EAAI,KAAOmZ,EAAK,QAAQJ,EAAe,EAAE,EAAE,KAAK,EAChD/Y,EAAI,MAAQoZ,EAAc,CAAC,EAAE,KAAK,EAC9BA,EAAc,CAAC,IACjBpZ,EAAI,WAAaoZ,EAAc,CAAC,EAAE,KAAK,IAGzCpZ,EAAI,KAAOmZ,EAENnZ,CACT,CACA,SAAS+X,GAA2BZ,EAAegC,EAAMvnB,EAAO6lB,EAAO,CACrE,IAAI4B,EAAiB,CAAC,EACtB,MAAI,WAAW,KAAKlC,EAAc,IAAI,GAAK,MAAM,QAAQgC,CAAI,EAC/ChC,EAAc,KAAK,QAAQ,IAAK,EAAE,EAAE,QAAQ,IAAK,EAAE,EAAE,MAAM,GAAG,EAAE,IAAKrlB,GAAMA,EAAE,KAAK,CAAC,EACzF,QAAQ,CAAC4B,EAAM5B,IAAM,CACzBunB,EAAe3lB,CAAI,EAAIylB,EAAKrnB,CAAC,CAC/B,CAAC,EACQ,WAAW,KAAKqlB,EAAc,IAAI,GAAK,CAAC,MAAM,QAAQgC,CAAI,GAAK,OAAOA,GAAS,SAC5EhC,EAAc,KAAK,QAAQ,IAAK,EAAE,EAAE,QAAQ,IAAK,EAAE,EAAE,MAAM,GAAG,EAAE,IAAKrlB,GAAMA,EAAE,KAAK,CAAC,EACzF,QAAS4B,GAAS,CACtB2lB,EAAe3lB,CAAI,EAAIylB,EAAKzlB,CAAI,CAClC,CAAC,EAED2lB,EAAelC,EAAc,IAAI,EAAIgC,EAEnChC,EAAc,QAChBkC,EAAelC,EAAc,KAAK,EAAIvlB,GACpCulB,EAAc,aAChBkC,EAAelC,EAAc,UAAU,EAAIM,GACtC4B,CACT,CACA,SAAS3B,GAAWzd,EAAS,CAC3B,MAAO,CAAC,MAAM,QAAQA,CAAO,GAAK,CAAC,MAAMA,CAAO,CAClD,CAGA,SAASqf,IAAW,CACpB,CACAA,GAAS,OAAS,CAAC3mB,EAAI,CAAE,WAAAmF,CAAW,EAAG,CAAE,QAASlF,CAAS,IAAM,CAC/D,IAAI6M,EAAOpB,GAAY1L,CAAE,EACpB8M,EAAK,UACRA,EAAK,QAAU,CAAC,GAClBA,EAAK,QAAQ3H,CAAU,EAAInF,EAC3BC,EAAS,IAAM,OAAO6M,EAAK,QAAQ3H,CAAU,CAAC,CAChD,EACAuC,GAAU,MAAOif,EAAQ,EAGzBjf,GAAU,KAAM,CAAC1H,EAAI,CAAE,WAAAmF,CAAW,EAAG,CAAE,OAAQmE,EAAS,QAASrJ,CAAS,IAAM,CAC1ED,EAAG,QAAQ,YAAY,IAAM,YAC/BkL,GAAK,4CAA6ClL,CAAE,EACtD,IAAI+O,EAAYlJ,GAAc7F,EAAImF,CAAU,EACxCqL,EAAO,IAAM,CACf,GAAIxQ,EAAG,eACL,OAAOA,EAAG,eACZ,IAAIqhB,EAASrhB,EAAG,QAAQ,UAAU,EAAI,EAAE,kBACxC,OAAA8C,GAAeue,EAAQ,CAAC,EAAGrhB,CAAE,EAC7B4B,GAAU,IAAM,CACd5B,EAAG,MAAMqhB,CAAM,EACfnP,GAAgB,IAAM5G,GAAS+V,CAAM,CAAC,EAAE,CAC1C,CAAC,EACDrhB,EAAG,eAAiBqhB,EACpBrhB,EAAG,UAAY,IAAM,CACnB4B,GAAU,IAAM,CACd2J,GAAY8V,CAAM,EAClBA,EAAO,OAAO,CAChB,CAAC,EACD,OAAOrhB,EAAG,cACZ,EACOqhB,CACT,EACI5Q,EAAO,IAAM,CACVzQ,EAAG,YAERA,EAAG,UAAU,EACb,OAAOA,EAAG,UACZ,EACAsJ,EAAQ,IAAMyF,EAAWxO,GAAU,CACjCA,EAAQiQ,EAAK,EAAIC,EAAK,CACxB,CAAC,CAAC,EACFxQ,EAAS,IAAMD,EAAG,WAAaA,EAAG,UAAU,CAAC,CAC/C,CAAC,EAGD0H,GAAU,KAAM,CAAC1H,EAAI,CAAE,WAAAmF,CAAW,EAAG,CAAE,SAAU4J,CAAU,IAAM,CACnDA,EAAU5J,CAAU,EAC1B,QAASpE,GAAS2f,GAAU1gB,EAAIe,CAAI,CAAC,CAC7C,CAAC,EACDsR,GAAe,CAACE,EAAMC,IAAO,CACvBD,EAAK,SACPC,EAAG,OAASD,EAAK,OAErB,CAAC,EAGDrI,GAAcN,GAAa,IAAKE,GAAKzC,GAAO,KAAK,CAAC,CAAC,CAAC,EACpDK,GAAU,KAAMwK,GAAgB,CAAClS,EAAI,CAAE,MAAAO,EAAO,UAAA+J,EAAW,WAAAnF,CAAW,EAAG,CAAE,QAASlF,CAAS,IAAM,CAC/F,IAAI8O,EAAY5J,EAAaU,GAAc7F,EAAImF,CAAU,EAAI,IAAM,CACnE,EACInF,EAAG,QAAQ,YAAY,IAAM,aAC1BA,EAAG,mBACNA,EAAG,iBAAmB,CAAC,GACpBA,EAAG,iBAAiB,SAASO,CAAK,GACrCP,EAAG,iBAAiB,KAAKO,CAAK,GAElC,IAAIgjB,EAAiB1B,GAAG7hB,EAAIO,EAAO+J,EAAYjF,GAAM,CACnD0J,EAAU,IAAM,CAChB,EAAG,CAAE,MAAO,CAAE,OAAU1J,CAAE,EAAG,OAAQ,CAACA,CAAC,CAAE,CAAC,CAC5C,CAAC,EACDpF,EAAS,IAAMsjB,EAAe,CAAC,CACjC,CAAC,CAAC,EAGFqD,GAA2B,WAAY,WAAY,UAAU,EAC7DA,GAA2B,YAAa,YAAa,WAAW,EAChEA,GAA2B,QAAS,OAAQ,OAAO,EACnDA,GAA2B,OAAQ,OAAQ,MAAM,EACjD,SAASA,GAA2B7lB,EAAM8lB,EAAe5F,EAAM,CAC7DvZ,GAAUmf,EAAgB7mB,GAAOkL,GAAK,oBAAoB2b,CAAa,mCAAmC9lB,CAAI,+CAA+CkgB,CAAI,GAAIjhB,CAAE,CAAC,CAC1K,CAGAwJ,GAAe,aAAazD,EAAe,EAC3CyD,GAAe,oBAAoB,CAAE,SAAU4S,GAAW,OAAQ3C,GAAS,QAASG,GAAM,IAAK6B,EAAM,CAAC,EACtG,IAAIqL,GAActd,GAGdud,GAAiBD,GCx0GrB,IAAAE,GAAiB,SCFF,SAARC,IAAsC,CAC3C,MAAO,CACL,aAAc,EACd,eAAgB,KAChB,MAAO,CACL,GAAM,CAAE,eAAAC,CAAe,EAAI,KAAK,IAAI,QACpC,KAAK,eAAiB,KAAK,MAAMA,CAAc,CACjD,EACA,UAAW,CACQ,SAAS,eAAe,YAAY,EAC/B,iBAAiB,IAAI,EACtC,QAAQ,CAACC,EAAKC,IAAQ,CACzB,IAAMC,EAAS,MAAM,KAAKF,EAAI,iBAAiB,OAAO,CAAC,EACjDG,EAAU,MAAM,KAAKH,EAAI,iBAAiB,QAAQ,CAAC,EACzD,QAAWI,IAAQ,CAACF,EAAQC,CAAO,EAAE,KAAK,EAAG,CAC3C,IAAME,EAAgBD,EAAK,aAAa,MAAM,EAAE,MAAM,GAAG,EACnDE,EAAWD,EAAcA,EAAc,OAAS,CAAC,EACvDD,EAAK,aAAa,OAAQ,QAAQH,CAAG,IAAIK,CAAQ,EAAE,CACrD,CACF,CAAC,CACH,EACA,kBAAmB,CACjB,IAAMC,EAAa,SAAS,eAAe,qBAAqB,EAChEA,EAAW,MAAQ,KAAK,aAAe,CACzC,EACA,aAAc,CACR,KAAK,aAAe,IACV,KAAK,OAAO,OAAO,QAAQ,IAAI,EACvC,OAAO,EACX,KAAK,SAAS,EACd,KAAK,iBAAiB,EAE1B,EACA,UAAW,CACT,IAAMC,EAAO,SAAS,eAAe,mBAAmB,EAClDC,EAAO,SAAS,WAAWD,EAAK,QAAS,EAAI,EACrC,SAAS,eAAe,YAAY,EAC5C,YAAYC,CAAI,EACtB,KAAK,cAAgB,EACrB,KAAK,SAAS,EACd,KAAK,iBAAiB,CACxB,CACF,CACF,CCrCA,SAASC,GAAMC,EAAG,CAChB,OAAOA,EAAI,GAAM,CACnB,CACA,IAAMC,GAAM,CAACD,EAAGE,EAAGC,IAAM,KAAK,IAAI,KAAK,IAAIH,EAAGG,CAAC,EAAGD,CAAC,EACnD,SAASE,GAAIJ,EAAG,CACd,OAAOC,GAAIF,GAAMC,EAAI,IAAI,EAAG,EAAG,GAAG,CACpC,CAIA,SAASK,GAAIC,EAAG,CACd,OAAOC,GAAIC,GAAMF,EAAI,GAAG,EAAG,EAAG,GAAG,CACnC,CACA,SAASG,GAAIH,EAAG,CACd,OAAOC,GAAIC,GAAMF,EAAI,IAAI,EAAI,IAAK,EAAG,CAAC,CACxC,CACA,SAASI,GAAIJ,EAAG,CACd,OAAOC,GAAIC,GAAMF,EAAI,GAAG,EAAG,EAAG,GAAG,CACnC,CAEA,IAAMK,GAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAE,EACvJC,GAAM,CAAC,GAAG,kBAAkB,EAC5BC,GAAKC,GAAKF,GAAIE,EAAI,EAAG,EACrBC,GAAKD,GAAKF,IAAKE,EAAI,MAAS,CAAC,EAAIF,GAAIE,EAAI,EAAG,EAC5CE,GAAKF,IAAOA,EAAI,MAAS,KAAQA,EAAI,IACrCG,GAAUX,GAAKU,GAAGV,EAAE,CAAC,GAAKU,GAAGV,EAAE,CAAC,GAAKU,GAAGV,EAAE,CAAC,GAAKU,GAAGV,EAAE,CAAC,EAC5D,SAASY,GAASC,EAAK,CACrB,IAAIC,EAAMD,EAAI,OACVE,EACJ,OAAIF,EAAI,CAAC,IAAM,MACTC,IAAQ,GAAKA,IAAQ,EACvBC,EAAM,CACJ,EAAG,IAAMV,GAAMQ,EAAI,CAAC,CAAC,EAAI,GACzB,EAAG,IAAMR,GAAMQ,EAAI,CAAC,CAAC,EAAI,GACzB,EAAG,IAAMR,GAAMQ,EAAI,CAAC,CAAC,EAAI,GACzB,EAAGC,IAAQ,EAAIT,GAAMQ,EAAI,CAAC,CAAC,EAAI,GAAK,GACtC,GACSC,IAAQ,GAAKA,IAAQ,KAC9BC,EAAM,CACJ,EAAGV,GAAMQ,EAAI,CAAC,CAAC,GAAK,EAAIR,GAAMQ,EAAI,CAAC,CAAC,EACpC,EAAGR,GAAMQ,EAAI,CAAC,CAAC,GAAK,EAAIR,GAAMQ,EAAI,CAAC,CAAC,EACpC,EAAGR,GAAMQ,EAAI,CAAC,CAAC,GAAK,EAAIR,GAAMQ,EAAI,CAAC,CAAC,EACpC,EAAGC,IAAQ,EAAKT,GAAMQ,EAAI,CAAC,CAAC,GAAK,EAAIR,GAAMQ,EAAI,CAAC,CAAC,EAAK,GACxD,IAGGE,CACT,CACA,IAAMC,GAAQ,CAACC,EAAGC,IAAMD,EAAI,IAAMC,EAAED,CAAC,EAAI,GACzC,SAASE,GAAUnB,EAAG,CACpB,IAAIkB,EAAIP,GAAQX,CAAC,EAAIO,GAAKE,GAC1B,OAAOT,EACH,IAAMkB,EAAElB,EAAE,CAAC,EAAIkB,EAAElB,EAAE,CAAC,EAAIkB,EAAElB,EAAE,CAAC,EAAIgB,GAAMhB,EAAE,EAAGkB,CAAC,EAC7C,MACN,CAEA,IAAME,GAAS,+GACf,SAASC,GAASC,EAAGC,EAAGC,EAAG,CACzB,IAAMP,EAAIM,EAAI,KAAK,IAAIC,EAAG,EAAIA,CAAC,EACzBN,EAAI,CAACO,EAAGC,GAAKD,EAAIH,EAAI,IAAM,KAAOE,EAAIP,EAAI,KAAK,IAAI,KAAK,IAAIS,EAAI,EAAG,EAAIA,EAAG,CAAC,EAAG,EAAE,EACtF,MAAO,CAACR,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,CAC1B,CACA,SAASS,GAASL,EAAGC,EAAGvB,EAAG,CACzB,IAAMkB,EAAI,CAACO,EAAGC,GAAKD,EAAIH,EAAI,IAAM,IAAMtB,EAAIA,EAAIuB,EAAI,KAAK,IAAI,KAAK,IAAIG,EAAG,EAAIA,EAAG,CAAC,EAAG,CAAC,EACpF,MAAO,CAACR,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,CAC1B,CACA,SAASU,GAASN,EAAGO,EAAGrB,EAAG,CACzB,IAAMsB,EAAMT,GAASC,EAAG,EAAG,EAAG,EAC1BS,EAMJ,IALIF,EAAIrB,EAAI,IACVuB,EAAI,GAAKF,EAAIrB,GACbqB,GAAKE,EACLvB,GAAKuB,GAEFA,EAAI,EAAGA,EAAI,EAAGA,IACjBD,EAAIC,CAAC,GAAK,EAAIF,EAAIrB,EAClBsB,EAAIC,CAAC,GAAKF,EAEZ,OAAOC,CACT,CACA,SAASE,GAASC,EAAGC,EAAG1B,EAAG2B,EAAGC,EAAK,CACjC,OAAIH,IAAMG,GACCF,EAAI1B,GAAK2B,GAAMD,EAAI1B,EAAI,EAAI,GAElC0B,IAAME,GACA5B,EAAIyB,GAAKE,EAAI,GAEfF,EAAIC,GAAKC,EAAI,CACvB,CACA,SAASE,GAAQrC,EAAG,CAElB,IAAMiC,EAAIjC,EAAE,EAAI,IACVkC,EAAIlC,EAAE,EAAI,IACVQ,EAAIR,EAAE,EAAI,IACVoC,EAAM,KAAK,IAAIH,EAAGC,EAAG1B,CAAC,EACtB8B,EAAM,KAAK,IAAIL,EAAGC,EAAG1B,CAAC,EACtBgB,GAAKY,EAAME,GAAO,EACpBhB,EAAGC,EAAGY,EACV,OAAIC,IAAQE,IACVH,EAAIC,EAAME,EACVf,EAAIC,EAAI,GAAMW,GAAK,EAAIC,EAAME,GAAOH,GAAKC,EAAME,GAC/ChB,EAAIU,GAASC,EAAGC,EAAG1B,EAAG2B,EAAGC,CAAG,EAC5Bd,EAAIA,EAAI,GAAK,IAER,CAACA,EAAI,EAAGC,GAAK,EAAGC,CAAC,CAC1B,CACA,SAASe,GAAMrB,EAAGD,EAAGT,EAAGgC,EAAG,CACzB,OACE,MAAM,QAAQvB,CAAC,EACXC,EAAED,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EAClBC,EAAED,EAAGT,EAAGgC,CAAC,GACb,IAAIzC,EAAG,CACX,CACA,SAAS0C,GAAQnB,EAAGC,EAAGC,EAAG,CACxB,OAAOe,GAAMlB,GAAUC,EAAGC,EAAGC,CAAC,CAChC,CACA,SAASkB,GAAQpB,EAAGO,EAAGrB,EAAG,CACxB,OAAO+B,GAAMX,GAAUN,EAAGO,EAAGrB,CAAC,CAChC,CACA,SAASmC,GAAQrB,EAAGC,EAAGvB,EAAG,CACxB,OAAOuC,GAAMZ,GAAUL,EAAGC,EAAGvB,CAAC,CAChC,CACA,SAAS4C,GAAItB,EAAG,CACd,OAAQA,EAAI,IAAM,KAAO,GAC3B,CACA,SAASuB,GAAShC,EAAK,CACrB,IAAMiC,EAAI1B,GAAO,KAAKP,CAAG,EACrBI,EAAI,IACJjB,EACJ,GAAI,CAAC8C,EACH,OAEEA,EAAE,CAAC,IAAM9C,IACXiB,EAAI6B,EAAE,CAAC,EAAIC,GAAI,CAACD,EAAE,CAAC,CAAC,EAAI/C,GAAI,CAAC+C,EAAE,CAAC,CAAC,GAEnC,IAAMxB,EAAIsB,GAAI,CAACE,EAAE,CAAC,CAAC,EACbE,EAAK,CAACF,EAAE,CAAC,EAAI,IACbG,EAAK,CAACH,EAAE,CAAC,EAAI,IACnB,OAAIA,EAAE,CAAC,IAAM,MACX9C,EAAI0C,GAAQpB,EAAG0B,EAAIC,CAAE,EACZH,EAAE,CAAC,IAAM,MAClB9C,EAAI2C,GAAQrB,EAAG0B,EAAIC,CAAE,EAErBjD,EAAIyC,GAAQnB,EAAG0B,EAAIC,CAAE,EAEhB,CACL,EAAGjD,EAAE,CAAC,EACN,EAAGA,EAAE,CAAC,EACN,EAAGA,EAAE,CAAC,EACN,EAAGiB,CACL,CACF,CACA,SAASiC,GAAOlD,EAAGmD,EAAK,CACtB,IAAI7B,EAAIe,GAAQrC,CAAC,EACjBsB,EAAE,CAAC,EAAIsB,GAAItB,EAAE,CAAC,EAAI6B,CAAG,EACrB7B,EAAImB,GAAQnB,CAAC,EACbtB,EAAE,EAAIsB,EAAE,CAAC,EACTtB,EAAE,EAAIsB,EAAE,CAAC,EACTtB,EAAE,EAAIsB,EAAE,CAAC,CACX,CACA,SAAS8B,GAAUpD,EAAG,CACpB,GAAI,CAACA,EACH,OAEF,IAAMiB,EAAIoB,GAAQrC,CAAC,EACbsB,EAAIL,EAAE,CAAC,EACPM,EAAInB,GAAIa,EAAE,CAAC,CAAC,EACZO,EAAIpB,GAAIa,EAAE,CAAC,CAAC,EAClB,OAAOjB,EAAE,EAAI,IACT,QAAQsB,CAAC,KAAKC,CAAC,MAAMC,CAAC,MAAMrB,GAAIH,EAAE,CAAC,CAAC,IACpC,OAAOsB,CAAC,KAAKC,CAAC,MAAMC,CAAC,IAC3B,CAEA,IAAM6B,GAAM,CACX,EAAG,OACH,EAAG,QACH,EAAG,KACH,EAAG,MACH,EAAG,KACH,EAAG,SACH,EAAG,QACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,QACH,EAAG,QACH,EAAG,KACH,EAAG,WACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,QACH,EAAG,KACH,EAAG,KACH,EAAG,OACH,EAAG,KACH,EAAG,QACH,EAAG,IACJ,EACMC,GAAU,CACf,OAAQ,SACR,YAAa,SACb,KAAM,OACN,UAAW,SACX,KAAM,SACN,MAAO,SACP,OAAQ,SACR,MAAO,IACP,aAAc,SACd,GAAI,KACJ,QAAS,SACT,KAAM,SACN,UAAW,SACX,OAAQ,SACR,SAAU,SACV,QAAS,SACT,IAAK,SACL,YAAa,SACb,QAAS,SACT,QAAS,SACT,KAAM,OACN,IAAK,KACL,MAAO,OACP,QAAS,SACT,KAAM,SACN,KAAM,OACN,KAAM,SACN,OAAQ,SACR,QAAS,SACT,SAAU,SACV,OAAQ,SACR,MAAO,SACP,IAAK,SACL,OAAQ,SACR,OAAQ,SACR,KAAM,SACN,MAAO,SACP,MAAO,SACP,IAAK,OACL,OAAQ,SACR,OAAQ,SACR,SAAU,OACV,OAAQ,SACR,OAAQ,SACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,SACR,QAAS,SACT,UAAW,SACX,IAAK,SACL,OAAQ,SACR,IAAK,SACL,IAAK,OACL,MAAO,SACP,IAAK,SACL,QAAS,SACT,OAAQ,SACR,QAAS,SACT,MAAO,SACP,KAAM,SACN,MAAO,SACP,OAAQ,SACR,UAAW,SACX,QAAS,SACT,WAAY,SACZ,IAAK,SACL,KAAM,SACN,MAAO,SACP,UAAW,SACX,KAAM,SACN,KAAM,SACN,KAAM,SACN,KAAM,SACN,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,MAAO,SACP,MAAO,SACP,QAAS,SACT,IAAK,SACL,KAAM,OACN,QAAS,SACT,IAAK,SACL,OAAQ,SACR,MAAO,SACP,WAAY,SACZ,IAAK,KACL,MAAO,SACP,OAAQ,SACR,OAAQ,SACR,KAAM,SACN,UAAW,OACX,IAAK,SACL,SAAU,SACV,WAAY,SACZ,QAAS,SACT,SAAU,SACV,QAAS,SACT,WAAY,SACZ,KAAM,KACN,OAAQ,SACR,KAAM,SACN,QAAS,SACT,MAAO,SACP,QAAS,SACT,KAAM,SACN,UAAW,SACX,OAAQ,SACR,MAAO,SACP,WAAY,SACZ,UAAW,SACX,QAAS,SACT,KAAM,SACN,IAAK,SACL,KAAM,SACN,QAAS,SACT,MAAO,SACP,YAAa,SACb,GAAI,SACJ,SAAU,SACV,MAAO,SACP,UAAW,SACX,MAAO,SACP,UAAW,SACX,MAAO,SACP,QAAS,SACT,MAAO,SACP,OAAQ,SACR,MAAO,SACP,IAAK,SACL,KAAM,SACN,KAAM,SACN,KAAM,SACN,SAAU,OACV,OAAQ,SACR,IAAK,SACL,IAAK,OACL,MAAO,SACP,OAAQ,SACR,GAAI,SACJ,MAAO,SACP,IAAK,SACL,KAAM,SACN,UAAW,SACX,GAAI,SACJ,MAAO,QACR,EACA,SAASC,IAAS,CAChB,IAAMC,EAAW,CAAC,EACZC,EAAO,OAAO,KAAKH,EAAO,EAC1BI,EAAQ,OAAO,KAAKL,EAAG,EACzB,EAAGM,EAAGjC,EAAGkC,EAAIC,EACjB,IAAK,EAAI,EAAG,EAAIJ,EAAK,OAAQ,IAAK,CAEhC,IADAG,EAAKC,EAAKJ,EAAK,CAAC,EACXE,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAC5BjC,EAAIgC,EAAMC,CAAC,EACXE,EAAKA,EAAG,QAAQnC,EAAG2B,GAAI3B,CAAC,CAAC,EAE3BA,EAAI,SAAS4B,GAAQM,CAAE,EAAG,EAAE,EAC5BJ,EAASK,CAAE,EAAI,CAACnC,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAMA,EAAI,GAAI,CACzD,CACA,OAAO8B,CACT,CAEA,IAAIM,GACJ,SAASC,GAAUlD,EAAK,CACjBiD,KACHA,GAAQP,GAAO,EACfO,GAAM,YAAc,CAAC,EAAG,EAAG,EAAG,CAAC,GAEjC,IAAM7C,EAAI6C,GAAMjD,EAAI,YAAY,CAAC,EACjC,OAAOI,GAAK,CACV,EAAGA,EAAE,CAAC,EACN,EAAGA,EAAE,CAAC,EACN,EAAGA,EAAE,CAAC,EACN,EAAGA,EAAE,SAAW,EAAIA,EAAE,CAAC,EAAI,GAC7B,CACF,CAEA,IAAM+C,GAAS,uGACf,SAASC,GAASpD,EAAK,CACrB,IAAMiC,EAAIkB,GAAO,KAAKnD,CAAG,EACrBI,EAAI,IACJgB,EAAGC,EAAG1B,EACV,GAAKsC,EAGL,IAAIA,EAAE,CAAC,IAAMb,EAAG,CACd,IAAMjC,EAAI,CAAC8C,EAAE,CAAC,EACd7B,EAAI6B,EAAE,CAAC,EAAIC,GAAI/C,CAAC,EAAIC,GAAID,EAAI,IAAK,EAAG,GAAG,CACzC,CACA,OAAAiC,EAAI,CAACa,EAAE,CAAC,EACRZ,EAAI,CAACY,EAAE,CAAC,EACRtC,EAAI,CAACsC,EAAE,CAAC,EACRb,EAAI,KAAOa,EAAE,CAAC,EAAIC,GAAId,CAAC,EAAIhC,GAAIgC,EAAG,EAAG,GAAG,GACxCC,EAAI,KAAOY,EAAE,CAAC,EAAIC,GAAIb,CAAC,EAAIjC,GAAIiC,EAAG,EAAG,GAAG,GACxC1B,EAAI,KAAOsC,EAAE,CAAC,EAAIC,GAAIvC,CAAC,EAAIP,GAAIO,EAAG,EAAG,GAAG,GACjC,CACL,EAAGyB,EACH,EAAGC,EACH,EAAG1B,EACH,EAAGS,CACL,EACF,CACA,SAASiD,GAAUlE,EAAG,CACpB,OAAOA,IACLA,EAAE,EAAI,IACF,QAAQA,EAAE,CAAC,KAAKA,EAAE,CAAC,KAAKA,EAAE,CAAC,KAAKG,GAAIH,EAAE,CAAC,CAAC,IACxC,OAAOA,EAAE,CAAC,KAAKA,EAAE,CAAC,KAAKA,EAAE,CAAC,IAElC,CAEA,IAAMmE,GAAKnE,GAAKA,GAAK,SAAYA,EAAI,MAAQ,KAAK,IAAIA,EAAG,EAAM,GAAG,EAAI,MAAQ,KACxEoE,GAAOpE,GAAKA,GAAK,OAAUA,EAAI,MAAQ,KAAK,KAAKA,EAAI,MAAS,MAAO,GAAG,EAC9E,SAASqE,GAAYC,EAAMC,EAAM,EAAG,CAClC,IAAMtC,EAAImC,GAAKjE,GAAImE,EAAK,CAAC,CAAC,EACpBpC,EAAIkC,GAAKjE,GAAImE,EAAK,CAAC,CAAC,EACpB9D,EAAI4D,GAAKjE,GAAImE,EAAK,CAAC,CAAC,EAC1B,MAAO,CACL,EAAGvE,GAAIoE,GAAGlC,EAAI,GAAKmC,GAAKjE,GAAIoE,EAAK,CAAC,CAAC,EAAItC,EAAE,CAAC,EAC1C,EAAGlC,GAAIoE,GAAGjC,EAAI,GAAKkC,GAAKjE,GAAIoE,EAAK,CAAC,CAAC,EAAIrC,EAAE,CAAC,EAC1C,EAAGnC,GAAIoE,GAAG3D,EAAI,GAAK4D,GAAKjE,GAAIoE,EAAK,CAAC,CAAC,EAAI/D,EAAE,CAAC,EAC1C,EAAG8D,EAAK,EAAI,GAAKC,EAAK,EAAID,EAAK,EACjC,CACF,CAEA,SAASE,GAAOxE,EAAG+B,EAAG0C,EAAO,CAC3B,GAAIzE,EAAG,CACL,IAAI0E,EAAMrC,GAAQrC,CAAC,EACnB0E,EAAI3C,CAAC,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI2C,EAAI3C,CAAC,EAAI2C,EAAI3C,CAAC,EAAI0C,EAAO1C,IAAM,EAAI,IAAM,CAAC,CAAC,EACzE2C,EAAMjC,GAAQiC,CAAG,EACjB1E,EAAE,EAAI0E,EAAI,CAAC,EACX1E,EAAE,EAAI0E,EAAI,CAAC,EACX1E,EAAE,EAAI0E,EAAI,CAAC,CACb,CACF,CACA,SAASC,GAAM3E,EAAG4E,EAAO,CACvB,OAAO5E,GAAI,OAAO,OAAO4E,GAAS,CAAC,EAAG5E,CAAC,CACzC,CACA,SAAS6E,GAAWC,EAAO,CACzB,IAAI9E,EAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAG,EACjC,OAAI,MAAM,QAAQ8E,CAAK,EACjBA,EAAM,QAAU,IAClB9E,EAAI,CAAC,EAAG8E,EAAM,CAAC,EAAG,EAAGA,EAAM,CAAC,EAAG,EAAGA,EAAM,CAAC,EAAG,EAAG,GAAG,EAC9CA,EAAM,OAAS,IACjB9E,EAAE,EAAID,GAAI+E,EAAM,CAAC,CAAC,KAItB9E,EAAI2E,GAAMG,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,EACzC9E,EAAE,EAAID,GAAIC,EAAE,CAAC,GAERA,CACT,CACA,SAAS+E,GAAclE,EAAK,CAC1B,OAAIA,EAAI,OAAO,CAAC,IAAM,IACboD,GAASpD,CAAG,EAEdgC,GAAShC,CAAG,CACrB,CACA,IAAMmE,GAAN,MAAMC,CAAM,CACV,YAAYH,EAAO,CACjB,GAAIA,aAAiBG,EACnB,OAAOH,EAET,IAAMI,EAAO,OAAOJ,EAChB9E,EACAkF,IAAS,SACXlF,EAAI6E,GAAWC,CAAK,EACXI,IAAS,WAClBlF,EAAIY,GAASkE,CAAK,GAAKf,GAAUe,CAAK,GAAKC,GAAcD,CAAK,GAEhE,KAAK,KAAO9E,EACZ,KAAK,OAAS,CAAC,CAACA,CAClB,CACA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CACA,IAAI,KAAM,CACR,IAAIA,EAAI2E,GAAM,KAAK,IAAI,EACvB,OAAI3E,IACFA,EAAE,EAAIG,GAAIH,EAAE,CAAC,GAERA,CACT,CACA,IAAI,IAAImF,EAAK,CACX,KAAK,KAAON,GAAWM,CAAG,CAC5B,CACA,WAAY,CACV,OAAO,KAAK,OAASjB,GAAU,KAAK,IAAI,EAAI,MAC9C,CACA,WAAY,CACV,OAAO,KAAK,OAAS/C,GAAU,KAAK,IAAI,EAAI,MAC9C,CACA,WAAY,CACV,OAAO,KAAK,OAASiC,GAAU,KAAK,IAAI,EAAI,MAC9C,CACA,IAAIgC,EAAOC,EAAQ,CACjB,GAAID,EAAO,CACT,IAAME,EAAK,KAAK,IACVC,EAAKH,EAAM,IACbI,EACEC,EAAIJ,IAAWG,EAAK,GAAMH,EAC1BxD,EAAI,EAAI4D,EAAI,EACZxE,EAAIqE,EAAG,EAAIC,EAAG,EACdG,IAAO7D,EAAIZ,IAAM,GAAKY,GAAKA,EAAIZ,IAAM,EAAIY,EAAIZ,IAAM,GAAK,EAC9DuE,EAAK,EAAIE,EACTJ,EAAG,EAAI,IAAOI,EAAKJ,EAAG,EAAIE,EAAKD,EAAG,EAAI,GACtCD,EAAG,EAAI,IAAOI,EAAKJ,EAAG,EAAIE,EAAKD,EAAG,EAAI,GACtCD,EAAG,EAAI,IAAOI,EAAKJ,EAAG,EAAIE,EAAKD,EAAG,EAAI,GACtCD,EAAG,EAAIG,EAAIH,EAAG,GAAK,EAAIG,GAAKF,EAAG,EAC/B,KAAK,IAAMD,CACb,CACA,OAAO,IACT,CACA,YAAYF,EAAO,EAAG,CACpB,OAAIA,IACF,KAAK,KAAOf,GAAY,KAAK,KAAMe,EAAM,KAAM,CAAC,GAE3C,IACT,CACA,OAAQ,CACN,OAAO,IAAIH,EAAM,KAAK,GAAG,CAC3B,CACA,MAAMhE,EAAG,CACP,YAAK,KAAK,EAAIlB,GAAIkB,CAAC,EACZ,IACT,CACA,QAAQwD,EAAO,CACb,IAAM3C,EAAM,KAAK,KACjB,OAAAA,EAAI,GAAK,EAAI2C,EACN,IACT,CACA,WAAY,CACV,IAAM3C,EAAM,KAAK,KACX6D,EAAMzF,GAAM4B,EAAI,EAAI,GAAMA,EAAI,EAAI,IAAOA,EAAI,EAAI,GAAI,EAC3D,OAAAA,EAAI,EAAIA,EAAI,EAAIA,EAAI,EAAI6D,EACjB,IACT,CACA,QAAQlB,EAAO,CACb,IAAM3C,EAAM,KAAK,KACjB,OAAAA,EAAI,GAAK,EAAI2C,EACN,IACT,CACA,QAAS,CACP,IAAMzE,EAAI,KAAK,KACf,OAAAA,EAAE,EAAI,IAAMA,EAAE,EACdA,EAAE,EAAI,IAAMA,EAAE,EACdA,EAAE,EAAI,IAAMA,EAAE,EACP,IACT,CACA,QAAQyE,EAAO,CACb,OAAAD,GAAO,KAAK,KAAM,EAAGC,CAAK,EACnB,IACT,CACA,OAAOA,EAAO,CACZ,OAAAD,GAAO,KAAK,KAAM,EAAG,CAACC,CAAK,EACpB,IACT,CACA,SAASA,EAAO,CACd,OAAAD,GAAO,KAAK,KAAM,EAAGC,CAAK,EACnB,IACT,CACA,WAAWA,EAAO,CAChB,OAAAD,GAAO,KAAK,KAAM,EAAG,CAACC,CAAK,EACpB,IACT,CACA,OAAOtB,EAAK,CACV,OAAAD,GAAO,KAAK,KAAMC,CAAG,EACd,IACT,CACF,EC5jBO,SAASyC,IAAO,CACrB,CAMK,IAAMC,IAAO,IAAM,CACxB,IAAIC,EAAK,EACT,MAAO,IAAMA,GACf,GAAA,EAOO,SAASC,GAAcC,EAA2C,CACvE,OAAOA,GAAU,IACnB,CAOO,SAASC,GAAqBD,EAA8B,CACjE,GAAIE,MAAMD,SAAWC,MAAMD,QAAQD,CAAQ,EACzC,MAAO,GAET,IAAMG,EAAOC,OAAOC,UAAUC,SAASC,KAAKP,CAAAA,EAC5C,OAAIG,EAAKK,MAAM,EAAG,CAAA,IAAO,WAAaL,EAAKK,MAAM,EAAC,IAAO,QAI3D,CAOO,SAASC,GAAST,EAAoC,CAC3D,OAAOA,IAAU,MAAQI,OAAOC,UAAUC,SAASC,KAAKP,CAAW,IAAA,iBACrE,CAMA,SAASU,GAAeV,EAAiC,CACvD,OAAQ,OAAOA,GAAU,UAAYA,aAAiBW,SAAWC,SAAS,CAACZ,CAAAA,CAC7E,CAUO,SAASa,GAAgBb,EAAgBc,EAAsB,CACpE,OAAOJ,GAAeV,CAASA,EAAAA,EAAQc,CACzC,CAOO,SAASC,GAAkBf,EAAsBc,EAAiB,CACvE,OAAO,OAAOd,EAAU,IAAcc,EAAed,CACvD,KAEagB,GAAe,CAAChB,EAAwBiB,IACnD,OAAOjB,GAAU,UAAYA,EAAMkB,SAAS,GAAA,EAC1CC,WAAWnB,CAAAA,EAAS,IAClB,CAACA,EAAQiB,EAEFG,GAAc,CAACpB,EAAwBiB,IAClD,OAAOjB,GAAU,UAAYA,EAAMkB,SAAS,GAAA,EAC1CC,WAAWnB,CAAAA,EAAS,IAAMiB,EACxB,CAACjB,EASA,SAASqB,GACdC,EACAC,EACAC,EACe,CACf,GAAIF,GAAM,OAAOA,EAAGf,MAAS,WAC3B,OAAOe,EAAGG,MAAMD,EAASD,CAAAA,CAE7B,CAuBO,SAASG,GACdC,EACAL,EACAE,EACAI,EACA,CACA,IAAIC,EAAWC,EAAaC,EAC5B,GAAI9B,GAAQ0B,CAAW,EAErB,GADAG,EAAMH,EAASK,OACXJ,EACF,IAAKC,EAAIC,EAAM,EAAGD,GAAK,EAAGA,IACxBP,EAAGf,KAAKiB,EAASG,EAASE,CAAAA,EAAIA,CAAAA,MAGhC,KAAKA,EAAI,EAAGA,EAAIC,EAAKD,IACnBP,EAAGf,KAAKiB,EAASG,EAASE,CAAAA,EAAIA,CAAAA,UAGzBpB,GAASkB,CAAW,EAG7B,IAFAI,EAAO3B,OAAO2B,KAAKJ,CAAAA,EACnBG,EAAMC,EAAKC,OACNH,EAAI,EAAGA,EAAIC,EAAKD,IACnBP,EAAGf,KAAKiB,EAASG,EAASI,EAAKF,CAAAA,CAAE,EAAGE,EAAKF,CAAE,CAAA,CAGjD,CAQO,SAASI,GAAeC,EAAuBC,EAAuB,CAC3E,IAAIN,EAAWO,EAAcC,EAAqBC,EAElD,GAAI,CAACJ,GAAM,CAACC,GAAMD,EAAGF,SAAWG,EAAGH,OACjC,MAAO,GAGT,IAAKH,EAAI,EAAGO,EAAOF,EAAGF,OAAQH,EAAIO,EAAM,EAAEP,EAIxC,GAHAQ,EAAKH,EAAGL,CAAE,EACVS,EAAKH,EAAGN,CAAE,EAENQ,EAAGE,eAAiBD,EAAGC,cAAgBF,EAAGG,QAAUF,EAAGE,MACzD,MAAO,GAIX,MAAO,EACT,CAMO,SAASC,GAASC,EAAc,CACrC,GAAIzC,GAAQyC,CAAS,EACnB,OAAOA,EAAOC,IAAIF,EAAAA,EAGpB,GAAIhC,GAASiC,CAAS,EAAA,CACpB,IAAME,EAASxC,OAAOyC,OAAO,IAAI,EAC3Bd,EAAO3B,OAAO2B,KAAKW,CAAAA,EACnBI,EAAOf,EAAKC,OACde,EAAI,EAER,KAAOA,EAAID,EAAM,EAAEC,EACjBH,EAAOb,EAAKgB,CAAAA,CAAE,EAAIN,GAAMC,EAAOX,EAAKgB,CAAAA,CAAE,CAAC,EAGzC,OAAOH,EAGT,OAAOF,CACT,CAEA,SAASM,GAAWC,EAAa,CAC/B,MAAO,CAAC,YAAa,YAAa,eAAeC,QAAQD,CAAAA,IAAS,EACpE,CAOO,SAASE,GAAQF,EAAaL,EAAmBF,EAAmBU,EAAoB,CAC7F,GAAI,CAACJ,GAAWC,CAAM,EACpB,OAGF,IAAMI,EAAOT,EAAOK,CAAI,EAClBK,EAAOZ,EAAOO,CAAI,EAEpBxC,GAAS4C,CAAS5C,GAAAA,GAAS6C,CAAO,EAEpCC,GAAMF,EAAMC,EAAMF,CAAAA,EAElBR,EAAOK,CAAI,EAAGR,GAAMa,CAAAA,CAExB,CA0BO,SAASC,GAASX,EAAWF,EAAqBU,EAAmC,CAC1F,IAAMI,EAAUvD,GAAQyC,CAAAA,EAAUA,EAAS,CAACA,CAAO,EAC7CN,EAAOoB,EAAQxB,OAErB,GAAI,CAACvB,GAASmC,CAAS,EACrB,OAAOA,EAGTQ,EAAUA,GAAW,CAAA,EACrB,IAAMK,EAASL,EAAQK,QAAUN,GAC7BO,EAEJ,QAAS7B,EAAI,EAAGA,EAAIO,EAAM,EAAEP,EAAG,CAE7B,GADA6B,EAAUF,EAAQ3B,CAAE,EAChB,CAACpB,GAASiD,CAAU,EACtB,SAGF,IAAM3B,EAAO3B,OAAO2B,KAAK2B,CAAAA,EACzB,QAASX,EAAI,EAAGD,EAAOf,EAAKC,OAAQe,EAAID,EAAM,EAAEC,EAC9CU,EAAO1B,EAAKgB,CAAE,EAAEH,EAAQc,EAASN,CAAAA,CAErC,CAEA,OAAOR,CACT,CAgBO,SAASe,GAAWf,EAAWF,EAAgC,CAEpE,OAAOa,GAASX,EAAQF,EAAQ,CAACe,OAAQG,EAAS,CAAA,CACpD,CAMO,SAASA,GAAUX,EAAaL,EAAmBF,EAAmB,CAC3E,GAAI,CAACM,GAAWC,CAAM,EACpB,OAGF,IAAMI,EAAOT,EAAOK,CAAI,EAClBK,EAAOZ,EAAOO,CAAI,EAEpBxC,GAAS4C,CAAS5C,GAAAA,GAAS6C,CAAO,EACpCK,GAAQN,EAAMC,CAAAA,EACJlD,OAAOC,UAAUwD,eAAetD,KAAKqC,EAAQK,CAAM,IAC7DL,EAAOK,CAAI,EAAGR,GAAMa,CAAAA,EAExB,CAaA,IAAMQ,GAAe,CAEnB,GAAIC,GAAKA,EAETC,EAAGC,GAAKA,EAAED,EACVE,EAAGD,GAAKA,EAAEC,CACZ,EAKO,SAASC,GAAUC,EAAa,CACrC,IAAMC,EAAQD,EAAIE,MAAM,GAAA,EAClBC,EAAiB,CAAA,EACnBC,EAAM,GACV,QAAWC,KAAQJ,EACjBG,GAAOC,EACHD,EAAIE,SAAS,IAAO,EACtBF,EAAMA,EAAIG,MAAM,EAAG,EAAM,EAAA,KAEzBJ,EAAKK,KAAKJ,CAAAA,EACVA,EAAM,IAGV,OAAOD,CACT,CAEA,SAASM,GAAgBT,EAAa,CACpC,IAAMG,EAAOJ,GAAUC,CAAAA,EACvB,OAAOU,GAAO,CACZ,QAAWC,KAAKR,EAAM,CACpB,GAAIQ,IAAM,GAGR,MAEFD,EAAMA,GAAOA,EAAIC,CAAE,CACrB,CACA,OAAOD,CACT,CACF,CAEO,SAASE,GAAiBF,EAAgBV,EAAkB,CAEjE,OADiBN,GAAaM,CAAI,IAAKN,GAAaM,CAAAA,EAAOS,GAAgBT,CAAG,IAC9DU,CAAAA,CAClB,CAKO,SAASG,GAAYC,EAAa,CACvC,OAAOA,EAAIC,OAAO,CAAA,EAAGC,YAAW,EAAKF,EAAIP,MAAM,CAAA,CACjD,KAGaU,GAAWC,GAAmB,OAAOA,EAAU,IAE/CC,GAAcD,GAAqD,OAAOA,GAAU,WAGpFE,GAAY,CAAIC,EAAWC,IAAc,CACpD,GAAID,EAAEE,OAASD,EAAEC,KACf,MAAO,GAGT,QAAWC,KAAQH,EACjB,GAAI,CAACC,EAAEG,IAAID,CAAO,EAChB,MAAO,GAIX,MAAO,EACT,EAMO,SAASE,GAAcC,EAAe,CAC3C,OAAOA,EAAEC,OAAS,WAAaD,EAAEC,OAAS,SAAWD,EAAEC,OAAS,aAClE,CCvZO,IAAMC,GAAKC,KAAKD,GACVE,GAAM,EAAIF,GACVG,GAAQD,GAAMF,GACdI,GAAWC,OAAOC,kBAClBC,GAAcP,GAAK,IACnBQ,GAAUR,GAAK,EACfS,GAAaT,GAAK,EAClBU,GAAgBV,GAAK,EAAI,EAEzBW,GAAQV,KAAKU,MACbC,GAAOX,KAAKW,KAElB,SAASC,GAAa9C,EAAWE,EAAW6C,EAAiB,CAClE,OAAOb,KAAKc,IAAIhD,EAAIE,CAAK6C,EAAAA,CAC3B,CAKO,SAASE,GAAQC,EAAe,CACrC,IAAMC,EAAejB,KAAKkB,MAAMF,CAAAA,EAChCA,EAAQJ,GAAaI,EAAOC,EAAcD,EAAQ,GAAA,EAAQC,EAAeD,EACzE,IAAMG,EAAYnB,KAAKoB,IAAI,GAAIpB,KAAKqB,MAAMX,GAAMM,CAAAA,CAAAA,CAAAA,EAC1CM,EAAWN,EAAQG,EAEzB,OADqBG,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAI,IAC3DH,CACxB,CAMO,SAASI,GAAWnC,EAAe,CACxC,IAAMoC,EAAmB,CAAA,EACnBC,EAAOzB,KAAKyB,KAAKrC,CAAAA,EACnBsC,EAEJ,IAAKA,EAAI,EAAGA,EAAID,EAAMC,IAChBtC,EAAQsC,IAAM,IAChBF,EAAO9C,KAAKgD,CAAAA,EACZF,EAAO9C,KAAKU,EAAQsC,CAAAA,GAGxB,OAAID,KAAUA,EAAO,IACnBD,EAAO9C,KAAK+C,CAAAA,EAGdD,EAAOG,KAAK,CAACpC,EAAGC,IAAMD,EAAIC,CAAAA,EAAGoC,IAAG,EACzBJ,CACT,CAKA,SAASK,GAAeC,EAAY,CAClC,OAAO,OAAOA,GAAM,UAAa,OAAOA,GAAM,UAAYA,IAAM,MAAQ,EAAEC,OAAOC,eAAeF,GAAK,aAAcA,GAAK,YAAaA,EACvI,CAEO,SAASG,GAASH,EAAyB,CAChD,MAAO,CAACD,GAAeC,CAAAA,GAAM,CAACI,MAAMC,WAAWL,CAAAA,CAAAA,GAAiBM,SAASN,CAAAA,CAC3E,CAEO,SAASO,GAAYvE,EAAW+C,EAAiB,CACtD,IAAMyB,EAAUtC,KAAKkB,MAAMpD,CAAAA,EAC3B,OAAOwE,EAAYzB,GAAY/C,GAAQwE,EAAUzB,GAAY/C,CAC/D,CAKO,SAASyE,GACdC,EACAC,EACAC,EACA,CACA,IAAIhB,EAAWiB,EAAcvD,EAE7B,IAAKsC,EAAI,EAAGiB,EAAOH,EAAMI,OAAQlB,EAAIiB,EAAMjB,IACzCtC,EAAQoD,EAAMd,CAAE,EAACgB,CAAS,EACrBR,MAAM9C,CAAQ,IACjBqD,EAAOI,IAAM7C,KAAK6C,IAAIJ,EAAOI,IAAKzD,CAAAA,EAClCqD,EAAOK,IAAM9C,KAAK8C,IAAIL,EAAOK,IAAK1D,CAAAA,EAGxC,CAEO,SAAS2D,GAAUC,EAAiB,CACzC,OAAOA,GAAWjD,GAAK,IACzB,CAEO,SAASkD,GAAUC,EAAiB,CACzC,OAAOA,GAAW,IAAMnD,GAC1B,CASO,SAASoD,GAAerF,EAAW,CACxC,GAAI,CAACsF,GAAetF,CAAI,EACtB,OAEF,IAAI+B,EAAI,EACJwD,EAAI,EACR,KAAOrD,KAAKkB,MAAMpD,EAAI+B,CAAAA,EAAKA,IAAM/B,GAC/B+B,GAAK,GACLwD,IAEF,OAAOA,CACT,CAGO,SAASC,GACdC,EACAC,EACA,CACA,IAAMC,EAAsBD,EAAW1F,EAAIyF,EAAYzF,EACjD4F,EAAsBF,EAAWxF,EAAIuF,EAAYvF,EACjD2F,EAA2B3D,KAAKyB,KAAKgC,EAAsBA,EAAsBC,EAAsBA,CAAAA,EAEzGE,EAAQ5D,KAAK6D,MAAMH,EAAqBD,CAAAA,EAE5C,OAAIG,EAAS,IAAO7D,KAClB6D,GAAS3D,IAGJ,CACL2D,MAAAA,EACAE,SAAUH,CACZ,CACF,CAEO,SAASI,GAAsBC,EAAYC,EAAY,CAC5D,OAAOjE,KAAKyB,KAAKzB,KAAKoB,IAAI6C,EAAInG,EAAIkG,EAAIlG,EAAG,CAAA,EAAKkC,KAAKoB,IAAI6C,EAAIjG,EAAIgG,EAAIhG,EAAG,CAAA,CAAA,CACxE,CAMO,SAASkG,GAAW3E,EAAWC,EAAW,CAC/C,OAAQD,EAAIC,EAAIU,IAASD,GAAMF,EACjC,CAMO,SAASoE,GAAgB5E,EAAW,CACzC,OAAQA,EAAIU,GAAMA,IAAOA,EAC3B,CAKO,SAASmE,GAAcR,EAAeS,EAAeC,EAAaC,EAAiC,CACxG,IAAMhF,EAAI4E,GAAgBP,CAAAA,EACpBY,EAAIL,GAAgBE,CAAAA,EACpBxE,EAAIsE,GAAgBG,CAAAA,EACpBG,EAAeN,GAAgBK,EAAIjF,CAAAA,EACnCmF,EAAaP,GAAgBtE,EAAIN,CAAAA,EACjCoF,EAAeR,GAAgB5E,EAAIiF,CAAAA,EACnCI,EAAaT,GAAgB5E,EAAIM,CAAAA,EACvC,OAAON,IAAMiF,GAAKjF,IAAMM,GAAM0E,GAAyBC,IAAM3E,GACvD4E,EAAeC,GAAcC,EAAeC,CACpD,CASO,SAASC,GAAYzF,EAAeyD,EAAaC,EAAa,CACnE,OAAO9C,KAAK8C,IAAID,EAAK7C,KAAK6C,IAAIC,EAAK1D,CAAAA,CAAAA,CACrC,CAMO,SAAS0F,GAAY1F,EAAe,CACzC,OAAOyF,GAAYzF,EAAO,OAAQ,KAAA,CACpC,CASO,SAAS2F,GAAW3F,EAAeiF,EAAeC,EAAazD,EAAU,KAAM,CACpF,OAAOzB,GAASY,KAAK6C,IAAIwB,EAAOC,CAAAA,EAAOzD,GAAWzB,GAASY,KAAK8C,IAAIuB,EAAOC,CAAOzD,EAAAA,CACpF,CC3LO,SAASmE,GACdC,EACA7F,EACA8F,EACA,CACAA,EAAMA,IAASC,GAAUF,EAAME,CAAAA,EAAS/F,GACxC,IAAIgG,EAAKH,EAAMrC,OAAS,EACpByC,EAAK,EACLC,EAEJ,KAAOF,EAAKC,EAAK,GACfC,EAAOD,EAAKD,GAAO,EACfF,EAAII,CAAM,EACZD,EAAKC,EAELF,EAAKE,EAIT,MAAO,CAACD,GAAAA,EAAID,GAAAA,CAAE,CAChB,CAUO,IAAMG,GAAe,CAC1BN,EACA/G,EACAkB,EACAoG,IAEAR,GAAQC,EAAO7F,EAAOoG,EAClBL,GAAS,CACT,IAAMM,EAAKR,EAAME,CAAAA,EAAOjH,CAAI,EAC5B,OAAOuH,EAAKrG,GAASqG,IAAOrG,GAAS6F,EAAME,EAAQ,CAAA,EAAGjH,CAAAA,IAASkB,GAE/D+F,GAASF,EAAME,CAAAA,EAAOjH,CAAAA,EAAOkB,CAAK,EAS3BsG,GAAgB,CAC3BT,EACA/G,EACAkB,IAEA4F,GAAQC,EAAO7F,EAAO+F,GAASF,EAAME,CAAAA,EAAOjH,CAAAA,GAAQkB,CAAO,EAStD,SAASuG,GAAeC,EAAkB/C,EAAaC,EAAa,CACzE,IAAIuB,EAAQ,EACRC,EAAMsB,EAAOhD,OAEjB,KAAOyB,EAAQC,GAAOsB,EAAOvB,CAAAA,EAASxB,GACpCwB,IAEF,KAAOC,EAAMD,GAASuB,EAAOtB,EAAM,CAAA,EAAKxB,GACtCwB,IAGF,OAAOD,EAAQ,GAAKC,EAAMsB,EAAOhD,OAC7BgD,EAAOnH,MAAM4F,EAAOC,CAAAA,EACpBsB,CACN,CAEA,IAAMC,GAAc,CAAC,OAAQ,MAAO,QAAS,SAAU,SAAU,EAgB1D,SAASC,GAAkBtD,EAAOuD,EAAU,CACjD,GAAIvD,EAAMwD,SAAU,CAClBxD,EAAMwD,SAASC,UAAUvH,KAAKqH,CAAAA,EAC9B,OAGFG,OAAOC,eAAe3D,EAAO,WAAY,CACvC4D,aAAc,GACdC,WAAY,GACZjH,MAAO,CACL6G,UAAW,CAACF,CAAS,CACvB,CACF,CAAA,EAEAF,GAAYS,QAASpI,GAAQ,CAC3B,IAAMqI,EAAS,UAAYxH,GAAYb,CAAAA,EACjCsI,EAAOhE,EAAMtE,CAAI,EAEvBgI,OAAOC,eAAe3D,EAAOtE,EAAK,CAChCkI,aAAc,GACdC,WAAY,GACZjH,SAASqH,EAAM,CACb,IAAMC,EAAMF,EAAKG,MAAM,KAAMF,CAAAA,EAE7BjE,OAAAA,EAAMwD,SAASC,UAAUK,QAASM,GAAW,CACvC,OAAOA,EAAOL,CAAAA,GAAY,YAC5BK,EAAOL,CAAAA,EAAWE,GAAAA,CAAAA,CAEtB,CAAA,EAEOC,CACT,CACF,CAAA,CACF,CAAA,CACF,CAQO,SAASG,GAAoBrE,EAAOuD,EAAU,CACnD,IAAMe,EAAOtE,EAAMwD,SACnB,GAAI,CAACc,EACH,OAGF,IAAMb,EAAYa,EAAKb,UACjBd,EAAQc,EAAUc,QAAQhB,CAAAA,EAC5BZ,IAAU,IACZc,EAAUe,OAAO7B,EAAO,CAAA,EAGtBc,EAAAA,EAAUrD,OAAS,KAIvBiD,GAAYS,QAASpI,GAAQ,CAC3B,OAAOsE,EAAMtE,CAAI,CACnB,CAAA,EAEA,OAAOsE,EAAMwD,SACf,CAKO,SAASiB,GAAgBC,EAAY,CAC1C,IAAMC,EAAM,IAAIC,IAAOF,CAAAA,EAEvB,OAAIC,EAAI1H,OAASyH,EAAMtE,OACdsE,EAGFG,MAAMC,KAAKH,CAAAA,CACpB,CClLaI,IAAAA,GAAoB,UAAW,CAC1C,OAAI,OAAOC,OAAW,IACb,SAASC,EAAU,CACxB,OAAOA,EAAAA,CACT,EAEKD,OAAOE,qBAChB,EAAK,EAME,SAASC,GACdC,EACAC,EACA,CACA,IAAIC,EAAY,CAAA,EACZC,EAAU,GAEd,OAAO,YAAYC,EAAa,CAE9BF,EAAYE,EACPD,IACHA,EAAU,GACVR,GAAiBU,KAAKT,OAAQ,IAAM,CAClCO,EAAU,GACVH,EAAGM,MAAML,EAASC,CAAAA,CACpB,CAAA,EAEJ,CACF,CAKO,SAASK,GAAmCP,EAA8BQ,EAAe,CAC9F,IAAIC,EACJ,OAAO,YAAYL,EAAa,CAC9B,OAAII,GACFE,aAAaD,CAAAA,EACbA,EAAUE,WAAWX,EAAIQ,EAAOJ,CAAAA,GAEhCJ,EAAGM,MAAM,KAAMF,CAAAA,EAEVI,CACT,CACF,CAMO,IAAMI,GAAsBC,GAAsCA,IAAU,QAAU,OAASA,IAAU,MAAQ,QAAU,SAMrHC,GAAiB,CAACD,EAAmCE,EAAeC,IAAgBH,IAAU,QAAUE,EAAQF,IAAU,MAAQG,GAAOD,EAAQC,GAAO,EAMxJC,GAAS,CAACJ,EAAoCK,EAAcC,EAAeC,IAE/EP,KADOO,EAAM,OAAS,SACJD,EAAQN,IAAU,UAAYK,EAAOC,GAAS,EAAID,EAOtE,SAASG,GAAiCC,EAAqCC,EAAwBC,EAA6B,CACzI,IAAMC,EAAaF,EAAOG,OAEtBX,EAAQ,EACRY,EAAQF,EAEZ,GAAIH,EAAKM,QAAS,CAChB,GAAM,CAACC,OAAAA,EAAQC,OAAAA,EAAQC,QAAAA,CAAAA,EAAWT,EAC5BU,EAAWV,EAAKW,SAAUX,EAAKW,QAAQC,QAAUZ,EAAKW,QAAQC,QAAQF,SAAkB,KACxFG,EAAON,EAAOM,KACd,CAACC,IAAAA,EAAKC,IAAAA,EAAKC,WAAAA,EAAYC,WAAAA,CAAU,EAAIV,EAAOW,cAAa,EAE/D,GAAIF,EAAY,CAMd,GALAvB,EAAQ0B,KAAKL,IAEXM,GAAaX,EAASI,EAAMC,CAAKO,EAAAA,GAEjCnB,EAAqBC,EAAaiB,GAAanB,EAAQY,EAAMN,EAAOe,iBAAiBR,CAAAA,CAAAA,EAAMO,EAAE,EAC3FX,EAAU,CACZ,IAAMa,EAAuBd,EAC1Be,MAAM,EAAG/B,EAAQ,CAAA,EACjBgC,QAAO,EACPC,UACCC,GAAS,CAACC,GAAcD,EAAMnB,EAAOK,IAAI,CAAC,CAAA,EAC9CpB,GAAS0B,KAAKJ,IAAI,EAAGQ,CAAAA,EAEvB9B,EAAQoC,GAAYpC,EAAO,EAAGU,EAAa,CAAA,EAE7C,GAAIc,EAAY,CACd,IAAIvB,EAAMyB,KAAKJ,IAEbK,GAAaX,EAASF,EAAOM,KAAME,EAAK,EAAI,EAAEe,GAAK,EAEnD5B,EAAqB,EAAIkB,GAAanB,EAAQY,EAAMN,EAAOe,iBAAiBP,CAAAA,EAAM,EAAI,EAAEe,GAAK,CAAC,EAChG,GAAIpB,EAAU,CACZ,IAAMqB,EAAuBtB,EAC1Be,MAAM9B,EAAM,CAAA,EACZgC,UACCC,GAAS,CAACC,GAAcD,EAAMnB,EAAOK,IAAI,CAAC,CAAA,EAC9CnB,GAAOyB,KAAKJ,IAAI,EAAGgB,CAAAA,EAErB1B,EAAQwB,GAAYnC,EAAKD,EAAOU,CAAcV,EAAAA,OAE9CY,EAAQF,EAAaV,EAIzB,MAAO,CAACA,MAAAA,EAAOY,MAAAA,CAAK,CACtB,CAQO,SAAS2B,GAAoBhC,EAAM,CACxC,GAAM,CAACiC,OAAAA,EAAQC,OAAAA,EAAQC,aAAAA,CAAAA,EAAgBnC,EACjCoC,EAAY,CAChBC,KAAMJ,EAAOnB,IACbwB,KAAML,EAAOlB,IACbwB,KAAML,EAAOpB,IACb0B,KAAMN,EAAOnB,GACf,EACA,GAAI,CAACoB,EACHnC,OAAAA,EAAKmC,aAAeC,EACb,GAET,IAAMK,EAAUN,EAAaE,OAASJ,EAAOnB,KAC1CqB,EAAaG,OAASL,EAAOlB,KAC7BoB,EAAaI,OAASL,EAAOpB,KAC7BqB,EAAaK,OAASN,EAAOnB,IAEhC2B,cAAOC,OAAOR,EAAcC,CAAAA,EACrBK,CACT,CChKA,IAAMG,GAAUC,GAAcA,IAAM,GAAKA,IAAM,EACzCC,GAAY,CAACD,EAAWE,EAAWC,IAAc,EAAE7B,KAAK8B,IAAI,EAAG,IAAMJ,GAAK,EAAM1B,EAAAA,KAAK+B,KAAKL,EAAIE,GAAKI,GAAMH,CAAC,GAC1GI,GAAa,CAACP,EAAWE,EAAWC,IAAc7B,KAAK8B,IAAI,EAAG,IAAMJ,CAAK1B,EAAAA,KAAK+B,KAAKL,EAAIE,GAAKI,GAAMH,CAAK,EAAA,EAOvGK,GAAU,CACdC,OAAST,GAAcA,EAEvBU,WAAaV,GAAcA,EAAIA,EAE/BW,YAAcX,GAAc,CAACA,GAAKA,EAAI,GAEtCY,cAAgBZ,IAAgBA,GAAK,IAAO,EACxC,GAAMA,EAAIA,EACV,KAAS,EAAEA,GAAMA,EAAI,GAAK,GAE9Ba,YAAcb,GAAcA,EAAIA,EAAIA,EAEpCc,aAAed,IAAeA,GAAK,GAAKA,EAAIA,EAAI,EAEhDe,eAAiBf,IAAgBA,GAAK,IAAO,EACzC,GAAMA,EAAIA,EAAIA,EACd,KAAQA,GAAK,GAAKA,EAAIA,EAAI,GAE9BgB,YAAchB,GAAcA,EAAIA,EAAIA,EAAIA,EAExCiB,aAAejB,GAAc,GAAGA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAEtDkB,eAAiBlB,IAAgBA,GAAK,IAAO,EACzC,GAAMA,EAAIA,EAAIA,EAAIA,EAClB,MAASA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAEnCmB,YAAcnB,GAAcA,EAAIA,EAAIA,EAAIA,EAAIA,EAE5CoB,aAAepB,IAAeA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,EAExDqB,eAAiBrB,IAAgBA,GAAK,IAAO,EACzC,GAAMA,EAAIA,EAAIA,EAAIA,EAAIA,EACtB,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,GAEtCsB,WAAatB,GAAc,CAAC1B,KAAKiD,IAAIvB,EAAIwB,EAAW,EAAA,EAEpDC,YAAczB,GAAc1B,KAAK+B,IAAIL,EAAIwB,EAAAA,EAEzCE,cAAgB1B,GAAc,KAAQ1B,KAAKiD,IAAII,GAAK3B,CAAAA,EAAK,GAEzD4B,WAAa5B,GAAcA,IAAO,EAAK,EAAI1B,KAAK8B,IAAI,EAAG,IAAMJ,EAAI,EAAG,EAEpE6B,YAAc7B,GAAcA,IAAO,EAAK,EAAI,CAAC1B,KAAK8B,IAAI,EAAG,IAAMJ,CAAAA,EAAK,EAEpE8B,cAAgB9B,GAAcD,GAAOC,CAAAA,EAAKA,EAAIA,EAAI,GAC9C,GAAM1B,KAAK8B,IAAI,EAAG,IAAMJ,EAAI,EAAI,EAAA,EAChC,IAAO,CAAC1B,KAAK8B,IAAI,EAAG,KAAOJ,EAAI,EAAI,EAAA,EAAM,GAE7C+B,WAAa/B,GAAcA,GAAM,EAAKA,EAAI,EAAE1B,KAAK0D,KAAK,EAAIhC,EAAIA,CAAAA,EAAK,GAEnEiC,YAAcjC,GAAc1B,KAAK0D,KAAK,GAAKhC,GAAK,GAAKA,CAAAA,EAErDkC,cAAgBlC,IAAgBA,GAAK,IAAO,EACxC,KAAQ1B,KAAK0D,KAAK,EAAIhC,EAAIA,CAAAA,EAAK,GAC/B,IAAO1B,KAAK0D,KAAK,GAAKhC,GAAK,GAAKA,CAAAA,EAAK,GAEzCmC,cAAgBnC,GAAcD,GAAOC,CAAAA,EAAKA,EAAIC,GAAUD,EAAG,KAAO,EAAI,EAEtEoC,eAAiBpC,GAAcD,GAAOC,CAAAA,EAAKA,EAAIO,GAAWP,EAAG,KAAO,EAAI,EAExEqC,iBAAiBrC,EAAW,CAG1B,OAAOD,GAAOC,CAAKA,EAAAA,EACjBA,EAAI,GACA,GAAMC,GAAUD,EAAI,EAAGE,MAAGC,GAAAA,EAC1B,GAAM,GAAMI,GAAWP,EAAI,EAAI,EAAGE,MAAGC,GAAE,CAC/C,EAEAmC,WAAWtC,EAAW,CAEpB,OAAOA,EAAIA,IAAME,QAAI,GAAKF,EAAIE,QAChC,EAEAqC,YAAYvC,EAAW,CAErB,OAAQA,GAAK,GAAKA,IAAME,QAAI,GAAKF,EAAIE,SAAK,CAC5C,EAEAsC,cAAcxC,EAAW,CACvB,IAAIE,EAAI,QACR,OAAKF,GAAK,IAAO,EACR,IAAOA,EAAIA,KAAOE,GAAM,OAAU,GAAKF,EAAIE,IAE7C,KAAQF,GAAK,GAAKA,KAAOE,GAAM,OAAU,GAAKF,EAAIE,GAAK,EAChE,EAEAuC,aAAezC,GAAc,EAAIQ,GAAQkC,cAAc,EAAI1C,CAAAA,EAE3D0C,cAAc1C,EAAW,CAGvB,OAAIA,EAAK,EAAI2C,KACJC,OAAI5C,EAAIA,EAEbA,EAAK,EAAI2C,KACJC,QAAK5C,GAAM,IAAM2C,MAAM3C,EAAI,IAEhCA,EAAK,IAAM2C,KACNC,QAAK5C,GAAM,KAAO2C,MAAM3C,EAAI,MAE9B4C,QAAK5C,GAAM,MAAQ2C,MAAM3C,EAAI,OACtC,EAEA6C,gBAAkB7C,GAAeA,EAAI,GACjCQ,GAAQiC,aAAazC,EAAI,CAAK,EAAA,GAC9BQ,GAAQkC,cAAc1C,EAAI,EAAI,CAAA,EAAK,GAAM,EAC/C,ECrHO,SAAS8C,GAAoBC,EAAyD,CAC3F,GAAIA,GAAS,OAAOA,GAAU,SAAU,CACtC,IAAMC,EAAOD,EAAME,SAAQ,EAC3B,OAAOD,IAAS,0BAA4BA,IAAS,0BAGvD,MAAO,EACT,CAWO,SAASE,GAAMH,EAAO,CAC3B,OAAOD,GAAoBC,CAAAA,EAASA,EAAQ,IAAII,GAAMJ,CAAM,CAC9D,CAKO,SAASK,GAAcL,EAAO,CACnC,OAAOD,GAAoBC,CAAAA,EACvBA,EACA,IAAII,GAAMJ,CAAAA,EAAOM,SAAS,EAAKC,EAAAA,OAAO,EAAA,EAAKC,UAAS,CAC1D,CC/BA,IAAMC,GAAU,CAAC,IAAK,IAAK,cAAe,SAAU,SAAU,EACxDC,GAAS,CAAC,QAAS,cAAe,iBAAkB,EAEnD,SAASC,GAAwBC,EAAU,CAChDA,EAASC,IAAI,YAAa,CACxBvH,MAAOwH,OACPC,SAAU,IACVC,OAAQ,eACRlI,GAAIgI,OACJG,KAAMH,OACNI,KAAMJ,OACNK,GAAIL,OACJb,KAAMa,MACR,CAAA,EAEAF,EAASQ,SAAS,YAAa,CAC7BC,UAAW,GACXC,WAAY,GACZC,YAAcC,GAASA,IAAS,cAAgBA,IAAS,cAAgBA,IAAS,IACpF,CAAA,EAEAZ,EAASC,IAAI,aAAc,CACzBH,OAAQ,CACNT,KAAM,QACNwB,WAAYf,EACd,EACAD,QAAS,CACPR,KAAM,SACNwB,WAAYhB,EACd,CACF,CAAA,EAEAG,EAASQ,SAAS,aAAc,CAC9BC,UAAW,WACb,CAAA,EAEAT,EAASC,IAAI,cAAe,CAC1Ba,OAAQ,CACNC,UAAW,CACTZ,SAAU,GACZ,CACF,EACAa,OAAQ,CACND,UAAW,CACTZ,SAAU,CACZ,CACF,EACAc,KAAM,CACJC,WAAY,CACVpB,OAAQ,CACNO,KAAM,aACR,EACAc,QAAS,CACP9B,KAAM,UACNc,SAAU,CACZ,CACF,CACF,EACAiB,KAAM,CACJF,WAAY,CACVpB,OAAQ,CACNS,GAAI,aACN,EACAY,QAAS,CACP9B,KAAM,UACNe,OAAQ,SACRlI,GAAImJ,GAAKA,EAAI,CACf,CACF,CACF,CACF,CAAA,CACF,CCvEO,SAASC,GAAqBtB,EAAU,CAC7CA,EAASC,IAAI,SAAU,CACrBsB,YAAa,GACbC,QAAS,CACPC,IAAK,EACLpI,MAAO,EACPqI,OAAQ,EACRtI,KAAM,CACR,CACF,CAAA,CACF,CCTA,IAAMuI,GAAY,IAAIC,IAEtB,SAASC,GAAgBC,EAAgB1H,EAAoC,CAC3EA,EAAUA,GAAW,CAAA,EACrB,IAAM2H,EAAWD,EAASE,KAAKC,UAAU7H,CAAAA,EACrC8H,EAAYP,GAAUQ,IAAIJ,CAAAA,EAC9B,OAAKG,IACHA,EAAY,IAAIE,KAAKC,aAAaP,EAAQ1H,CAAAA,EAC1CuH,GAAU1B,IAAI8B,EAAUG,CAAAA,GAEnBA,CACT,CAEO,SAASI,GAAaC,EAAaT,EAAgB1H,EAAoC,CAC5F,OAAOyH,GAAgBC,EAAQ1H,CAASoI,EAAAA,OAAOD,CAAAA,CACjD,CCRA,IAAME,GAAa,CAOjBC,OAAOtD,EAAO,CACZ,OAAOuD,GAAQvD,CAAS,EAAyBA,EAAS,GAAKA,CACjE,EAUAwD,QAAQC,EAAWC,EAAOC,EAAO,CAC/B,GAAIF,IAAc,EAChB,MAAO,IAGT,IAAMf,EAAS,KAAKkB,MAAM5I,QAAQ0H,OAC9BmB,EACAC,EAAQL,EAEZ,GAAIE,EAAMnJ,OAAS,EAAG,CAEpB,IAAMuJ,EAAUxI,KAAKJ,IAAII,KAAKyI,IAAIL,EAAM,CAAE,EAAC3D,KAAK,EAAGzE,KAAKyI,IAAIL,EAAMA,EAAMnJ,OAAS,CAAE,EAACwF,KAAK,CAAA,GACrF+D,EAAU,MAAQA,EAAU,QAC9BF,EAAW,cAGbC,EAAQG,GAAeR,EAAWE,CAAAA,EAGpC,IAAMO,EAAWC,GAAM5I,KAAKyI,IAAIF,CAAAA,CAAAA,EAO1BM,EAAaC,MAAMH,CAAAA,EAAY,EAAI3I,KAAKJ,IAAII,KAAKL,IAAI,GAAKK,KAAK+I,MAAMJ,CAAAA,EAAW,EAAA,EAAK,CAAE,EAEvFlJ,EAAU,CAAC6I,SAAAA,EAAUU,sBAAuBH,EAAYI,sBAAuBJ,CAAU,EAC/FtH,cAAOC,OAAO/B,EAAS,KAAKA,QAAQ2I,MAAMP,MAAM,EAEzCF,GAAaO,EAAWf,EAAQ1H,CAAAA,CACzC,EAWAyJ,YAAYhB,EAAWC,EAAOC,EAAO,CACnC,GAAIF,IAAc,EAChB,MAAO,IAET,IAAMiB,EAASf,EAAMD,CAAAA,EAAOiB,aAAgBlB,EAAalI,KAAK8B,IAAI,GAAI9B,KAAK+I,MAAMH,GAAMV,CAAAA,CAAAA,CAAAA,EACvF,MAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAACmB,SAASF,CAAAA,GAAWhB,EAAQ,GAAMC,EAAMnJ,OACxD6I,GAAWG,QAAQrK,KAAK,KAAMsK,EAAWC,EAAOC,CAAAA,EAElD,EACT,CAEF,EAGA,SAASM,GAAeR,EAAWE,EAAO,CAGxC,IAAIG,EAAQH,EAAMnJ,OAAS,EAAImJ,EAAM,CAAE,EAAC3D,MAAQ2D,EAAM,CAAE,EAAC3D,MAAQ2D,EAAM,CAAE,EAAC3D,MAAQ2D,EAAM,CAAE,EAAC3D,MAG3F,OAAIzE,KAAKyI,IAAIF,CAAAA,GAAU,GAAKL,IAAclI,KAAK+I,MAAMb,CAAY,IAE/DK,EAAQL,EAAYlI,KAAK+I,MAAMb,CAAAA,GAE1BK,CACT,CAMA,IAAAe,GAAe,CAACxB,WAAAA,EAAU,ECnGnB,SAASyB,GAAmBlE,EAAU,CAC3CA,EAASC,IAAI,QAAS,CACpBkE,QAAS,GACTC,OAAQ,GACRnJ,QAAS,GACToJ,YAAa,GASbC,OAAQ,QAERC,KAAM,GAMNC,MAAO,EAGPC,KAAM,CACJN,QAAS,GACTO,UAAW,EACXC,gBAAiB,GACjBC,UAAW,GACXC,WAAY,EACZC,UAAW,CAACC,EAAM3K,IAAYA,EAAQsK,UACtCM,UAAW,CAACD,EAAM3K,IAAYA,EAAQmF,MACtC6E,OAAQ,EACV,EAEAa,OAAQ,CACNd,QAAS,GACTe,KAAM,CAAA,EACNC,WAAY,EACZC,MAAO,CACT,EAGAC,MAAO,CAELlB,QAAS,GAGTmB,KAAM,GAGN9D,QAAS,CACPC,IAAK,EACLC,OAAQ,CACV,CACF,EAGAqB,MAAO,CACLwC,YAAa,EACbC,YAAa,GACbC,OAAQ,GACRC,gBAAiB,EACjBC,gBAAiB,GACjBnE,QAAS,EACT2C,QAAS,GACTyB,SAAU,GACVC,gBAAiB,EACjBC,YAAa,EAEb/N,SAAUkM,GAAMxB,WAAWC,OAC3BqD,MAAO,CAAA,EACPC,MAAO,CAAA,EACPjN,MAAO,SACPkN,WAAY,OAEZC,kBAAmB,GACnBC,cAAe,4BACfC,gBAAiB,CACnB,CACF,CAAA,EAEApG,EAASqG,MAAM,cAAe,QAAS,GAAI,OAAA,EAC3CrG,EAASqG,MAAM,aAAc,QAAS,GAAI,aAAA,EAC1CrG,EAASqG,MAAM,eAAgB,QAAS,GAAI,aAAA,EAC5CrG,EAASqG,MAAM,cAAe,QAAS,GAAI,OAAA,EAE3CrG,EAASQ,SAAS,QAAS,CACzBC,UAAW,GACXE,YAAcC,GAAS,CAACA,EAAK0F,WAAW,QAAA,GAAa,CAAC1F,EAAK0F,WAAW,OAAY1F,GAAAA,IAAS,YAAcA,IAAS,SAClHF,WAAaE,GAASA,IAAS,cAAgBA,IAAS,kBAAoBA,IAAS,MACvF,CAAA,EAEAZ,EAASQ,SAAS,SAAU,CAC1BC,UAAW,OACb,CAAA,EAEAT,EAASQ,SAAS,cAAe,CAC/BG,YAAcC,GAASA,IAAS,mBAAqBA,IAAS,WAC9DF,WAAaE,GAASA,IAAS,iBACjC,CAAA,CACF,KClGa2F,GAAYrK,OAAOsK,OAAO,IAAI,EAC9BC,GAAcvK,OAAOsK,OAAO,IAAI,EAO7C,SAASE,GAASC,EAAMC,EAAK,CAC3B,GAAI,CAACA,EACH,OAAOD,EAET,IAAME,EAAOD,EAAIE,MAAM,GAAA,EACvB,QAASC,EAAI,EAAGC,EAAIH,EAAKjN,OAAQmN,EAAIC,EAAG,EAAED,EAAG,CAC3C,IAAME,EAAIJ,EAAKE,CAAE,EACjBJ,EAAOA,EAAKM,CAAE,IAAKN,EAAKM,CAAAA,EAAK/K,OAAOsK,OAAO,IAAI,EACjD,CACA,OAAOG,CACT,CAEA,SAAS1G,GAAIiH,EAAMC,EAAOzE,EAAQ,CAChC,OAAI,OAAOyE,GAAU,SACZC,GAAMV,GAASQ,EAAMC,CAAQzE,EAAAA,CAAAA,EAE/B0E,GAAMV,GAASQ,EAAM,EAAKC,EAAAA,CAAAA,CACnC,CAMO,IAAME,GAAN,KAAMA,CACXC,YAAYC,EAAcC,EAAW,CACnC,KAAKzG,UAAYb,OACjB,KAAKuH,gBAAkB,kBACvB,KAAKC,YAAc,kBACnB,KAAKnI,MAAQ,OACb,KAAKoI,SAAW,CAAA,EAChB,KAAKC,iBAAoBC,GAAYA,EAAQ7E,MAAM8E,SAASC,oBAAmB,EAC/E,KAAKC,SAAW,CAAA,EAChB,KAAKC,OAAS,CACZ,YACA,WACA,QACA,aACA,WACD,EACD,KAAKC,KAAO,CACVC,OAAQ,qDACRC,KAAM,GACNC,MAAO,SACPC,WAAY,IACZC,OAAQ,IACV,EACA,KAAKC,MAAQ,CAAA,EACb,KAAKC,qBAAuB,CAACC,EAAKtO,IAAYqF,GAAcrF,EAAQqN,eAAe,EACnF,KAAKkB,iBAAmB,CAACD,EAAKtO,IAAYqF,GAAcrF,EAAQsN,WAAW,EAC3E,KAAKkB,WAAa,CAACF,EAAKtO,IAAYqF,GAAcrF,EAAQmF,KAAK,EAC/D,KAAKsJ,UAAY,IACjB,KAAKC,YAAc,CACjBC,KAAM,UACNC,UAAW,GACXC,iBAAkB,EACpB,EACA,KAAKC,oBAAsB,GAC3B,KAAKC,QAAU,KACf,KAAKC,QAAU,KACf,KAAKC,QAAU,GACf,KAAKC,QAAU,CAAA,EACf,KAAKC,WAAa,GAClB,KAAKC,MAAQtJ,OACb,KAAKuJ,OAAS,CAAA,EACd,KAAKC,SAAW,GAChB,KAAKC,wBAA0B,GAE/B,KAAKnJ,SAAS+G,CAAAA,EACd,KAAK/O,MAAMgP,CAAAA,CACb,CAMAvH,IAAIkH,EAAOzE,EAAQ,CACjB,OAAOzC,GAAI,KAAMkH,EAAOzE,CAAAA,CAC1B,CAKAP,IAAIgF,EAAO,CACT,OAAOT,GAAS,KAAMS,CAAAA,CACxB,CAMA3G,SAAS2G,EAAOzE,EAAQ,CACtB,OAAOzC,GAAIwG,GAAaU,EAAOzE,CAAAA,CACjC,CAEAkH,SAASzC,EAAOzE,EAAQ,CACtB,OAAOzC,GAAIsG,GAAWY,EAAOzE,CAAAA,CAC/B,CAmBA2D,MAAMc,EAAOvG,EAAMiJ,EAAaC,EAAY,CAC1C,IAAMC,EAAcrD,GAAS,KAAMS,CAAAA,EAC7B6C,EAAoBtD,GAAS,KAAMmD,CAAAA,EACnCI,EAAc,IAAMrJ,EAE1B1E,OAAOgO,iBAAiBH,EAAa,CAEnC,CAACE,CAAAA,EAAc,CACb7K,MAAO2K,EAAYnJ,CAAK,EACxBuJ,SAAU,EACZ,EAEA,CAACvJ,CAAAA,EAAO,CACNwJ,WAAY,GACZjI,KAAM,CACJ,IAAMkI,EAAQ,KAAKJ,CAAY,EACzBK,EAASN,EAAkBF,CAAW,EAC5C,OAAIS,GAASF,CAAQ,EACZnO,OAAOC,OAAO,CAAA,EAAImO,EAAQD,CAAAA,EAE5BG,GAAeH,EAAOC,CAAAA,CAC/B,EACArK,IAAIb,EAAO,CACT,KAAK6K,CAAAA,EAAe7K,CACtB,CACF,CACF,CAAA,CACF,CAEA5G,MAAMiS,EAAU,CACdA,EAASC,QAASlS,GAAUA,EAAM,IAAI,CAAA,CACxC,CACF,EAGAwH,GAA+B,IAAIqH,GAAS,CAC1C1G,YAAcC,GAAS,CAACA,EAAK0F,WAAW,IAAA,EACxC5F,WAAaE,GAASA,IAAS,SAC/B4H,MAAO,CACL/H,UAAW,aACb,EACAqI,YAAa,CACXnI,YAAa,GACbD,WAAY,EACd,CACF,EAAG,CAACX,GAAyBuB,GAAsB4C,GAAmB,ECtJ/D,SAASyG,GAAazC,EAAgB,CAC3C,MAAI,CAACA,GAAQ9M,GAAc8M,EAAKE,IAAI,GAAKhN,GAAc8M,EAAKC,MAAM,EACzD,MAGDD,EAAKG,MAAQH,EAAKG,MAAQ,IAAM,KACrCH,EAAKK,OAASL,EAAKK,OAAS,IAAM,IACnCL,EAAKE,KAAO,MACZF,EAAKC,MACT,CAKO,SAASyC,GACdlC,EACAmC,EACAC,EACAC,EACAC,EACA,CACA,IAAIC,EAAYJ,EAAKG,CAAO,EAC5B,OAAKC,IACHA,EAAYJ,EAAKG,CAAO,EAAGtC,EAAIwC,YAAYF,CAAAA,EAAQ5F,MACnD0F,EAAGK,KAAKH,CAAAA,GAENC,EAAYF,IACdA,EAAUE,GAELF,CACT,CASO,SAASK,GACd1C,EACAR,EACAmD,EACAC,EACA,CACAA,EAAQA,GAAS,CAAA,EACjB,IAAIT,EAAOS,EAAMT,KAAOS,EAAMT,MAAQ,CAAA,EAClCC,EAAKQ,EAAMC,eAAiBD,EAAMC,gBAAkB,CAAA,EAEpDD,EAAMpD,OAASA,IACjB2C,EAAOS,EAAMT,KAAO,CAAA,EACpBC,EAAKQ,EAAMC,eAAiB,CAAA,EAC5BD,EAAMpD,KAAOA,GAGfQ,EAAI8C,KAAI,EAER9C,EAAIR,KAAOA,EACX,IAAI6C,EAAU,EACRU,EAAOJ,EAAczR,OACvBmN,EAAW2E,EAAWC,EAAcC,EAAwBC,EAChE,IAAK9E,EAAI,EAAGA,EAAI0E,EAAM1E,IAIpB,GAHA6E,EAAQP,EAActE,CAAE,EAGG6E,GAAU,MAAQ,CAACjJ,GAAQiJ,CAAQ,EAC5Db,EAAUH,GAAalC,EAAKmC,EAAMC,EAAIC,EAASa,CAAAA,UACtCjJ,GAAQiJ,CAAQ,EAGzB,IAAKF,EAAI,EAAGC,EAAOC,EAAMhS,OAAQ8R,EAAIC,EAAMD,IACzCG,EAAcD,EAAMF,CAAE,EAEWG,GAAgB,MAAQ,CAAClJ,GAAQkJ,CAAc,IAC9Ed,EAAUH,GAAalC,EAAKmC,EAAMC,EAAIC,EAASc,CAAAA,GAMvDnD,EAAIoD,QAAO,EAEX,IAAMC,EAAQjB,EAAGlR,OAAS,EAC1B,GAAImS,EAAQV,EAAczR,OAAQ,CAChC,IAAKmN,EAAI,EAAGA,EAAIgF,EAAOhF,IACrB,OAAO8D,EAAKC,EAAG/D,CAAAA,CAAE,EAEnB+D,EAAGkB,OAAO,EAAGD,CAAAA,EAEf,OAAOhB,CACT,CAUO,SAASkB,GAAYjJ,EAAckJ,EAAe9G,EAAe,CACtE,IAAMwC,EAAmB5E,EAAMmJ,wBACzBC,EAAYhH,IAAU,EAAIzK,KAAKJ,IAAI6K,EAAQ,EAAG,EAAA,EAAO,EAC3D,OAAOzK,KAAK0R,OAAOH,EAAQE,GAAaxE,CAAAA,EAAoBA,EAAmBwE,CACjF,CAKO,SAASE,GAAYC,EAA4B7D,EAAgC,CAClF,CAACA,GAAO,CAAC6D,IAIb7D,EAAMA,GAAO6D,EAAOC,WAAW,IAAA,EAE/B9D,EAAI8C,KAAI,EAGR9C,EAAI+D,eAAc,EAClB/D,EAAIgE,UAAU,EAAG,EAAGH,EAAOnH,MAAOmH,EAAOI,MAAM,EAC/CjE,EAAIoD,QAAO,EACb,CASO,SAASc,GACdlE,EACAtO,EACAyS,EACAC,EACA,CAEAC,GAAgBrE,EAAKtO,EAASyS,EAAGC,EAAG,IAAI,CAC1C,CAGO,SAASC,GACdrE,EACAtO,EACAyS,EACAC,EACAE,EACA,CACA,IAAI3N,EAAc4N,EAAiBC,EAAiB9E,EAAc+E,EAAsB/H,EAAegI,EAAkBC,EACnHhF,EAAQjO,EAAQkT,WAChBC,EAAWnT,EAAQmT,SACnBC,EAASpT,EAAQoT,OACnBC,GAAOF,GAAY,GAAKG,GAE5B,GAAIrF,GAAS,OAAOA,GAAU,WAC5BhJ,EAAOgJ,EAAM/I,SAAQ,EACjBD,IAAS,6BAA+BA,IAAS,8BAA8B,CACjFqJ,EAAI8C,KAAI,EACR9C,EAAIiF,UAAUd,EAAGC,CAAAA,EACjBpE,EAAIkF,OAAOH,CAAAA,EACX/E,EAAImF,UAAUxF,EAAO,CAACA,EAAMjD,MAAQ,EAAG,CAACiD,EAAMsE,OAAS,EAAGtE,EAAMjD,MAAOiD,EAAMsE,MAAM,EACnFjE,EAAIoD,QAAO,EACX,OAIJ,GAAIrI,QAAM+J,CAAWA,GAAAA,GAAU,GAM/B,QAFA9E,EAAIoF,UAAS,EAELzF,EAAAA,CAEN,QACM2E,EACFtE,EAAIqF,QAAQlB,EAAGC,EAAGE,EAAI,EAAGQ,EAAQ,EAAG,EAAG7Q,EAAAA,EAEvC+L,EAAIsF,IAAInB,EAAGC,EAAGU,EAAQ,EAAG7Q,EAAAA,EAE3B+L,EAAIuF,UAAS,EACb,MACF,IAAK,WACH7I,EAAQ4H,EAAIA,EAAI,EAAIQ,EACpB9E,EAAIwF,OAAOrB,EAAIlS,KAAK+B,IAAI+Q,CAAOrI,EAAAA,EAAO0H,EAAInS,KAAKiD,IAAI6P,CAAOD,EAAAA,CAAAA,EAC1DC,GAAOU,GACPzF,EAAI0F,OAAOvB,EAAIlS,KAAK+B,IAAI+Q,CAAOrI,EAAAA,EAAO0H,EAAInS,KAAKiD,IAAI6P,CAAOD,EAAAA,CAAAA,EAC1DC,GAAOU,GACPzF,EAAI0F,OAAOvB,EAAIlS,KAAK+B,IAAI+Q,CAAOrI,EAAAA,EAAO0H,EAAInS,KAAKiD,IAAI6P,CAAOD,EAAAA,CAAAA,EAC1D9E,EAAIuF,UAAS,EACb,MACF,IAAK,cAQHd,EAAeK,EAAS,KACxBpF,EAAOoF,EAASL,EAChBF,EAAUtS,KAAKiD,IAAI6P,EAAMY,EAAcjG,EAAAA,EACvCgF,EAAWzS,KAAKiD,IAAI6P,EAAMY,EAAAA,GAAerB,EAAIA,EAAI,EAAIG,EAAe/E,GACpE8E,EAAUvS,KAAK+B,IAAI+Q,EAAMY,EAAcjG,EAAAA,EACvCiF,EAAW1S,KAAK+B,IAAI+Q,EAAMY,EAAAA,GAAerB,EAAIA,EAAI,EAAIG,EAAe/E,GACpEM,EAAIsF,IAAInB,EAAIO,EAAUN,EAAII,EAASC,EAAcM,EAAMzP,GAAIyP,EAAM5P,EAAAA,EACjE6K,EAAIsF,IAAInB,EAAIQ,EAAUP,EAAIG,EAASE,EAAcM,EAAM5P,GAAS4P,CAAAA,EAChE/E,EAAIsF,IAAInB,EAAIO,EAAUN,EAAII,EAASC,EAAcM,EAAKA,EAAM5P,EAAAA,EAC5D6K,EAAIsF,IAAInB,EAAIQ,EAAUP,EAAIG,EAASE,EAAcM,EAAM5P,GAAS4P,EAAMzP,EAAAA,EACtE0K,EAAIuF,UAAS,EACb,MACF,IAAK,OACH,GAAI,CAACV,EAAU,CACbnF,EAAOzN,KAAK2T,QAAUd,EACtBpI,EAAQ4H,EAAIA,EAAI,EAAI5E,EACpBM,EAAI6F,KAAK1B,EAAIzH,EAAO0H,EAAI1E,EAAM,EAAIhD,EAAO,EAAIgD,CAAAA,EAC7C,MAEFqF,GAAOY,GAET,IAAK,UACHjB,EAAWzS,KAAKiD,IAAI6P,CAAAA,GAAQT,EAAIA,EAAI,EAAIQ,GACxCP,EAAUtS,KAAKiD,IAAI6P,CAAOD,EAAAA,EAC1BN,EAAUvS,KAAK+B,IAAI+Q,CAAOD,EAAAA,EAC1BH,EAAW1S,KAAK+B,IAAI+Q,CAAAA,GAAQT,EAAIA,EAAI,EAAIQ,GACxC9E,EAAIwF,OAAOrB,EAAIO,EAAUN,EAAII,CAAAA,EAC7BxE,EAAI0F,OAAOvB,EAAIQ,EAAUP,EAAIG,CAAAA,EAC7BvE,EAAI0F,OAAOvB,EAAIO,EAAUN,EAAII,CAAAA,EAC7BxE,EAAI0F,OAAOvB,EAAIQ,EAAUP,EAAIG,CAAAA,EAC7BvE,EAAIuF,UAAS,EACb,MACF,IAAK,WACHR,GAAOY,GAET,IAAK,QACHjB,EAAWzS,KAAKiD,IAAI6P,CAAAA,GAAQT,EAAIA,EAAI,EAAIQ,GACxCP,EAAUtS,KAAKiD,IAAI6P,CAAOD,EAAAA,EAC1BN,EAAUvS,KAAK+B,IAAI+Q,CAAOD,EAAAA,EAC1BH,EAAW1S,KAAK+B,IAAI+Q,CAAAA,GAAQT,EAAIA,EAAI,EAAIQ,GACxC9E,EAAIwF,OAAOrB,EAAIO,EAAUN,EAAII,CAAAA,EAC7BxE,EAAI0F,OAAOvB,EAAIO,EAAUN,EAAII,CAAAA,EAC7BxE,EAAIwF,OAAOrB,EAAIQ,EAAUP,EAAIG,CAAAA,EAC7BvE,EAAI0F,OAAOvB,EAAIQ,EAAUP,EAAIG,CAAAA,EAC7B,MACF,IAAK,OACHG,EAAWzS,KAAKiD,IAAI6P,CAAAA,GAAQT,EAAIA,EAAI,EAAIQ,GACxCP,EAAUtS,KAAKiD,IAAI6P,CAAOD,EAAAA,EAC1BN,EAAUvS,KAAK+B,IAAI+Q,CAAOD,EAAAA,EAC1BH,EAAW1S,KAAK+B,IAAI+Q,CAAAA,GAAQT,EAAIA,EAAI,EAAIQ,GACxC9E,EAAIwF,OAAOrB,EAAIO,EAAUN,EAAII,CAAAA,EAC7BxE,EAAI0F,OAAOvB,EAAIO,EAAUN,EAAII,CAAAA,EAC7BxE,EAAIwF,OAAOrB,EAAIQ,EAAUP,EAAIG,CAAAA,EAC7BvE,EAAI0F,OAAOvB,EAAIQ,EAAUP,EAAIG,CAAAA,EAC7BQ,GAAOY,GACPjB,EAAWzS,KAAKiD,IAAI6P,CAAAA,GAAQT,EAAIA,EAAI,EAAIQ,GACxCP,EAAUtS,KAAKiD,IAAI6P,CAAOD,EAAAA,EAC1BN,EAAUvS,KAAK+B,IAAI+Q,CAAOD,EAAAA,EAC1BH,EAAW1S,KAAK+B,IAAI+Q,CAAAA,GAAQT,EAAIA,EAAI,EAAIQ,GACxC9E,EAAIwF,OAAOrB,EAAIO,EAAUN,EAAII,CAAAA,EAC7BxE,EAAI0F,OAAOvB,EAAIO,EAAUN,EAAII,CAAAA,EAC7BxE,EAAIwF,OAAOrB,EAAIQ,EAAUP,EAAIG,CAAAA,EAC7BvE,EAAI0F,OAAOvB,EAAIQ,EAAUP,EAAIG,CAAAA,EAC7B,MACF,IAAK,OACHA,EAAUD,EAAIA,EAAI,EAAIrS,KAAKiD,IAAI6P,CAAAA,EAAOD,EACtCN,EAAUvS,KAAK+B,IAAI+Q,CAAOD,EAAAA,EAC1B9E,EAAIwF,OAAOrB,EAAII,EAASH,EAAII,CAAAA,EAC5BxE,EAAI0F,OAAOvB,EAAII,EAASH,EAAII,CAAAA,EAC5B,MACF,IAAK,OACHxE,EAAIwF,OAAOrB,EAAGC,CAAAA,EACdpE,EAAI0F,OAAOvB,EAAIlS,KAAKiD,IAAI6P,CAAAA,GAAQT,EAAIA,EAAI,EAAIQ,GAASV,EAAInS,KAAK+B,IAAI+Q,CAAOD,EAAAA,CAAAA,EACzE,MACF,IAAK,GACH9E,EAAIuF,UAAS,EACb,KACJ,CAEAvF,EAAI8F,KAAI,EACJpU,EAAQqU,YAAc,GACxB/F,EAAIgG,OAAM,EAEd,CASO,SAASC,GACdxT,EACAyT,EACAC,EACA,CACAA,OAAAA,EAASA,GAAU,GAEZ,CAACD,GAASzT,GAASA,EAAM0R,EAAI+B,EAAKxV,KAAOyV,GAAU1T,EAAM0R,EAAI+B,EAAKvV,MAAQwV,GACjF1T,EAAM2R,EAAI8B,EAAKnN,IAAMoN,GAAU1T,EAAM2R,EAAI8B,EAAKlN,OAASmN,CACzD,CAEO,SAASC,GAASpG,EAA+BkG,EAAY,CAClElG,EAAI8C,KAAI,EACR9C,EAAIoF,UAAS,EACbpF,EAAI6F,KAAKK,EAAKxV,KAAMwV,EAAKnN,IAAKmN,EAAKvV,MAAQuV,EAAKxV,KAAMwV,EAAKlN,OAASkN,EAAKnN,GAAG,EAC5EiH,EAAInE,KAAI,CACV,CAEO,SAASwK,GAAWrG,EAA+B,CACxDA,EAAIoD,QAAO,CACb,CAKO,SAASkD,GACdtG,EACAuG,EACA3E,EACA4E,EACAnG,EACA,CACA,GAAI,CAACkG,EACH,OAAOvG,EAAI0F,OAAO9D,EAAOuC,EAAGvC,EAAOwC,CAAC,EAEtC,GAAI/D,IAAS,SAAU,CACrB,IAAMoG,GAAYF,EAASpC,EAAIvC,EAAOuC,GAAK,EAC3CnE,EAAI0F,OAAOe,EAAUF,EAASnC,CAAC,EAC/BpE,EAAI0F,OAAOe,EAAU7E,EAAOwC,CAAC,CAC/B,MAAW/D,IAAS,SAAY,CAAC,CAACmG,EAChCxG,EAAI0F,OAAOa,EAASpC,EAAGvC,EAAOwC,CAAC,EAE/BpE,EAAI0F,OAAO9D,EAAOuC,EAAGoC,EAASnC,CAAC,EAEjCpE,EAAI0F,OAAO9D,EAAOuC,EAAGvC,EAAOwC,CAAC,CAC/B,CAKO,SAASsC,GACd1G,EACAuG,EACA3E,EACA4E,EACA,CACA,GAAI,CAACD,EACH,OAAOvG,EAAI0F,OAAO9D,EAAOuC,EAAGvC,EAAOwC,CAAC,EAEtCpE,EAAI2G,cACFH,EAAOD,EAASK,KAAOL,EAASM,KAChCL,EAAOD,EAASO,KAAOP,EAASQ,KAChCP,EAAO5E,EAAOiF,KAAOjF,EAAOgF,KAC5BJ,EAAO5E,EAAOmF,KAAOnF,EAAOkF,KAC5BlF,EAAOuC,EACPvC,EAAOwC,CAAC,CACZ,CAEA,SAAS4C,GAAchH,EAA+BiH,EAAsB,CACtEA,EAAKC,aACPlH,EAAIiF,UAAUgC,EAAKC,YAAY,CAAA,EAAID,EAAKC,YAAY,CAAE,CAAA,EAGnDxU,GAAcuU,EAAKpC,QAAQ,GAC9B7E,EAAIkF,OAAO+B,EAAKpC,QAAQ,EAGtBoC,EAAKpQ,QACPmJ,EAAImH,UAAYF,EAAKpQ,OAGnBoQ,EAAKG,YACPpH,EAAIoH,UAAYH,EAAKG,WAGnBH,EAAKI,eACPrH,EAAIqH,aAAeJ,EAAKI,aAE5B,CAEA,SAASC,GACPtH,EACAmE,EACAC,EACAmD,EACAN,EACA,CACA,GAAIA,EAAKO,eAAiBP,EAAKQ,UAAW,CAQxC,IAAMC,EAAU1H,EAAIwC,YAAY+E,CAAAA,EAC1B7W,EAAOyT,EAAIuD,EAAQC,sBACnBhX,EAAQwT,EAAIuD,EAAQE,uBACpB7O,EAAMqL,EAAIsD,EAAQG,wBAClB7O,EAASoL,EAAIsD,EAAQI,yBACrBC,EAAcd,EAAKO,eAAiBzO,EAAMC,GAAU,EAAIA,EAE9DgH,EAAIgI,YAAchI,EAAImH,UACtBnH,EAAIoF,UAAS,EACbpF,EAAIhE,UAAYiL,EAAKgB,iBAAmB,EACxCjI,EAAIwF,OAAO9U,EAAMqX,CAAAA,EACjB/H,EAAI0F,OAAO/U,EAAOoX,CAAAA,EAClB/H,EAAIgG,OAAM,EAEd,CAEA,SAASkC,GAAalI,EAA+BiH,EAAuB,CAC1E,IAAMkB,EAAWnI,EAAImH,UAErBnH,EAAImH,UAAYF,EAAKpQ,MACrBmJ,EAAIoI,SAASnB,EAAKvW,KAAMuW,EAAKlO,IAAKkO,EAAKvK,MAAOuK,EAAKhD,MAAM,EACzDjE,EAAImH,UAAYgB,CAClB,CAKO,SAASE,GACdrI,EACApD,EACAuH,EACAC,EACA5E,EACAyH,EAAuB,CAAA,EACvB,CACA,IAAMqB,EAAQrO,GAAQ2C,CAAAA,EAAQA,EAAO,CAACA,CAAK,EACrCoJ,EAASiB,EAAKsB,YAAc,GAAKtB,EAAKuB,cAAgB,GACxDnK,EAAWkJ,EAMf,IAJAvH,EAAI8C,KAAI,EACR9C,EAAIR,KAAOA,EAAK8C,OAChB0E,GAAchH,EAAKiH,CAAAA,EAEd5I,EAAI,EAAGA,EAAIiK,EAAMpX,OAAQ,EAAEmN,EAC9BkJ,EAAOe,EAAMjK,CAAE,EAEX4I,EAAKwB,UACPP,GAAalI,EAAKiH,EAAKwB,QAAQ,EAG7BzC,IACEiB,EAAKuB,cACPxI,EAAIgI,YAAcf,EAAKuB,aAGpB9V,GAAcuU,EAAKsB,WAAW,IACjCvI,EAAIhE,UAAYiL,EAAKsB,aAGvBvI,EAAI0I,WAAWnB,EAAMpD,EAAGC,EAAG6C,EAAK0B,QAAQ,GAG1C3I,EAAI4I,SAASrB,EAAMpD,EAAGC,EAAG6C,EAAK0B,QAAQ,EACtCrB,GAAatH,EAAKmE,EAAGC,EAAGmD,EAAMN,CAAAA,EAE9B7C,GAAKyE,OAAOrJ,EAAKI,UAAU,EAG7BI,EAAIoD,QAAO,CACb,CAOO,SAAS0F,GACd9I,EACA6F,EACA,CACA,GAAM,CAAC1B,EAAAA,EAAGC,EAAAA,EAAGE,EAAAA,EAAGyE,EAAAA,EAAGjE,OAAAA,CAAM,EAAIe,EAG7B7F,EAAIsF,IAAInB,EAAIW,EAAOkE,QAAS5E,EAAIU,EAAOkE,QAASlE,EAAOkE,QAAS,IAAM1T,GAAIA,GAAI,EAAI,EAGlF0K,EAAI0F,OAAOvB,EAAGC,EAAI2E,EAAIjE,EAAOmE,UAAU,EAGvCjJ,EAAIsF,IAAInB,EAAIW,EAAOmE,WAAY7E,EAAI2E,EAAIjE,EAAOmE,WAAYnE,EAAOmE,WAAY3T,GAAIH,GAAS,EAAI,EAG9F6K,EAAI0F,OAAOvB,EAAIG,EAAIQ,EAAOoE,YAAa9E,EAAI2E,CAAAA,EAG3C/I,EAAIsF,IAAInB,EAAIG,EAAIQ,EAAOoE,YAAa9E,EAAI2E,EAAIjE,EAAOoE,YAAapE,EAAOoE,YAAa/T,GAAS,EAAG,EAAI,EAGpG6K,EAAI0F,OAAOvB,EAAIG,EAAGF,EAAIU,EAAOqE,QAAQ,EAGrCnJ,EAAIsF,IAAInB,EAAIG,EAAIQ,EAAOqE,SAAU/E,EAAIU,EAAOqE,SAAUrE,EAAOqE,SAAU,EAAG,CAAChU,GAAS,EAAI,EAGxF6K,EAAI0F,OAAOvB,EAAIW,EAAOkE,QAAS5E,CAAAA,CACjC,CCxgBA,IAAMgF,GAAc,uCACdC,GAAa,wEAcZ,SAASC,GAAa5S,EAAwBgJ,EAAsB,CACzE,IAAM6J,GAAW,GAAK7S,GAAO8S,MAAMJ,EAAAA,EACnC,GAAI,CAACG,GAAWA,EAAQ,CAAA,IAAO,SAC7B,OAAO7J,EAAO,IAKhB,OAFAhJ,EAAQ,CAAC6S,EAAQ,CAAE,EAEXA,EAAQ,CAAE,EAAA,CAChB,IAAK,KACH,OAAO7S,EACT,IAAK,IACHA,GAAS,IACT,KAGJ,CAEA,OAAOgJ,EAAOhJ,CAChB,CAEA,IAAM+S,GAAgB9Q,GAAe,CAACA,GAAK,EAQpC,SAAS+Q,GAAkBhT,EAAwCiT,EAA0C,CAClH,IAAMC,EAAM,CAAA,EACNC,EAAWhI,GAAS8H,CAAAA,EACpBxL,EAAO0L,EAAWrW,OAAO2K,KAAKwL,CAAAA,EAASA,EACvCG,EAAOjI,GAASnL,CAAAA,EAClBmT,EACEE,GAAQjI,GAAepL,EAAMqT,CAAAA,EAAOrT,EAAMiT,EAAMI,CAAK,CAAA,CAAC,EACtDA,GAAQrT,EAAMqT,CAAAA,EAChB,IAAMrT,EAEV,QAAWqT,KAAQ5L,EACjByL,EAAIG,CAAAA,EAAQN,GAAaK,EAAKC,CAAAA,CAAAA,EAEhC,OAAOH,CACT,CAUO,SAASI,GAAOtT,EAA8B,CACnD,OAAOgT,GAAkBhT,EAAO,CAACqC,IAAK,IAAKpI,MAAO,IAAKqI,OAAQ,IAAKtI,KAAM,GAAG,CAAA,CAC/E,CASO,SAASuZ,GAAcvT,EAA6B,CACzD,OAAOgT,GAAkBhT,EAAO,CAAC,UAAW,WAAY,aAAc,aAAc,CAAA,CACtF,CAUO,SAASwT,GAAUxT,EAAkC,CAC1D,IAAMyT,EAAMH,GAAOtT,CAAAA,EAEnByT,OAAAA,EAAIzN,MAAQyN,EAAIzZ,KAAOyZ,EAAIxZ,MAC3BwZ,EAAIlG,OAASkG,EAAIpR,IAAMoR,EAAInR,OAEpBmR,CACT,CAUO,SAASC,GAAO1Y,EAA4B2Y,EAA8B,CAC/E3Y,EAAUA,GAAW,CAAA,EACrB2Y,EAAWA,GAAY/S,GAASkI,KAEhC,IAAIE,EAAOoC,GAAepQ,EAAQgO,KAAM2K,EAAS3K,IAAI,EAEjD,OAAOA,GAAS,WAClBA,EAAO4K,SAAS5K,EAAM,EAAA,GAExB,IAAIC,EAAQmC,GAAepQ,EAAQiO,MAAO0K,EAAS1K,KAAK,EACpDA,GAAS,EAAE,GAAKA,GAAO6J,MAAMH,EAAa,IAC5CkB,QAAQC,KAAK,kCAAoC7K,EAAQ,GAAA,EACzDA,EAAQnI,QAGV,IAAMgI,EAAO,CACXC,OAAQqC,GAAepQ,EAAQ+N,OAAQ4K,EAAS5K,MAAM,EACtDG,WAAY0J,GAAaxH,GAAepQ,EAAQkO,WAAYyK,EAASzK,UAAU,EAAGF,CAAAA,EAClFA,KAAAA,EACAC,MAAAA,EACAE,OAAQiC,GAAepQ,EAAQmO,OAAQwK,EAASxK,MAAM,EACtDyC,OAAQ,EACV,EAEA9C,OAAAA,EAAK8C,OAASL,GAAazC,CAAAA,EACpBA,CACT,CAaO,SAASiL,GAAQC,EAAwBvL,EAAkB/E,EAAgBuQ,EAA+B,CAC/G,IAAIC,EAAY,GACZvM,EAAW0E,EAAcrM,EAE7B,IAAK2H,EAAI,EAAG0E,EAAO2H,EAAOxZ,OAAQmN,EAAI0E,EAAM,EAAE1E,EAE5C,GADA3H,EAAQgU,EAAOrM,CAAE,EACb3H,IAAUc,SAGV2H,IAAY3H,QAAa,OAAOd,GAAU,aAC5CA,EAAQA,EAAMyI,CAAAA,EACdyL,EAAY,IAEVxQ,IAAU5C,QAAayC,GAAQvD,CAAQ,IACzCA,EAAQA,EAAM0D,EAAQ1D,EAAMxF,MAAM,EAClC0Z,EAAY,IAEVlU,IAAUc,QACZ,OAAImT,GAAQ,CAACC,IACXD,EAAKC,UAAY,IAEZlU,CAGb,CAQO,SAASmU,GAAUC,EAAuChP,EAAwBH,EAAsB,CAC7G,GAAM,CAAC/J,IAAAA,EAAKC,IAAAA,CAAAA,EAAOiZ,EACbC,EAASC,GAAYlP,GAAQjK,EAAMD,GAAO,CAAA,EAC1CqZ,EAAW,CAACvU,EAAewU,IAAgBvP,GAAejF,IAAU,EAAI,EAAIA,EAAQwU,EAC1F,MAAO,CACLtZ,IAAKqZ,EAASrZ,EAAK,CAACK,KAAKyI,IAAIqQ,CAAAA,CAAAA,EAC7BlZ,IAAKoZ,EAASpZ,EAAKkZ,CAAAA,CACrB,CACF,CAUO,SAASI,GAAcC,EAAuBjM,EAAiB,CACpE,OAAO3L,OAAOC,OAAOD,OAAOsK,OAAOsN,CAAgBjM,EAAAA,CAAAA,CACrD,CCnLO,SAASkM,GAIdC,EACAC,EAAW,CAAC,IACZC,EACAnB,EACAoB,EAAY,IAAMH,EAAO,CAAA,EACzB,CACA,IAAMI,EAAkBF,GAAcF,EAClC,OAAOjB,EAAa,MACtBA,EAAWsB,GAAS,YAAaL,CAAAA,GAEnC,IAAM1I,EAA6B,CACjC,CAACgJ,OAAOC,WAAW,EAAG,SACtBC,WAAY,GACZC,QAAST,EACTU,YAAaN,EACb3T,UAAWsS,EACX4B,WAAYR,EACZvK,SAAWzC,GAAqB4M,GAAgB,CAAC5M,EAAU6M,GAAAA,CAAO,EAAEC,EAAUG,EAAiBrB,CAAAA,CACjG,EACA,OAAO,IAAI6B,MAAMtJ,EAAO,CAItBuJ,eAAevK,EAAQmI,EAAc,CACnC,cAAOnI,EAAOmI,CAAK,EACnB,OAAOnI,EAAOwK,MACd,OAAOd,EAAO,CAAA,EAAGvB,CAAAA,EACV,EACT,EAKAtQ,IAAImI,EAAQmI,EAAc,CACxB,OAAOsC,GAAQzK,EAAQmI,EACrB,IAAMuC,GAAqBvC,EAAMwB,EAAUD,EAAQ1J,CAAAA,CAAAA,CACvD,EAMA2K,yBAAyB3K,EAAQmI,EAAM,CACrC,OAAOyC,QAAQD,yBAAyB3K,EAAOmK,QAAQ,CAAA,EAAIhC,CAAAA,CAC7D,EAKA0C,gBAAiB,CACf,OAAOD,QAAQC,eAAenB,EAAO,CAAE,CAAA,CACzC,EAKAoB,IAAI9K,EAAQmI,EAAc,CACxB,OAAO4C,GAAqB/K,CAAQtG,EAAAA,SAASyO,CAAAA,CAC/C,EAKA6C,QAAQhL,EAAQ,CACd,OAAO+K,GAAqB/K,CAAAA,CAC9B,EAKArK,IAAIqK,EAAQmI,EAAcrT,EAAO,CAC/B,IAAMmW,EAAUjL,EAAOkL,WAAalL,EAAOkL,SAAWrB,EAAU,GAChE7J,OAAAA,EAAOmI,CAAAA,EAAQ8C,EAAQ9C,CAAK,EAAGrT,EAC/B,OAAOkL,EAAOwK,MACP,EACT,CACF,CAAA,CACF,CAUO,SAASW,GAIdC,EACA7N,EACA8N,EACAC,EACA,CACA,IAAMtK,EAA4B,CAChCkJ,WAAY,GACZqB,OAAQH,EACRI,SAAUjO,EACVkO,UAAWJ,EACXK,OAAQ,IAAIC,IACZ1O,aAAcA,GAAamO,EAAOE,CAAAA,EAClCM,WAAaxN,GAAmB+M,GAAeC,EAAOhN,EAAKiN,EAAUC,CAAAA,EACrEhM,SAAWzC,GAAqBsO,GAAeC,EAAM9L,SAASzC,CAAAA,EAAQU,EAAS8N,EAAUC,CAAAA,CAC3F,EACA,OAAO,IAAIhB,MAAMtJ,EAAO,CAItBuJ,eAAevK,EAAQmI,EAAM,CAC3B,cAAOnI,EAAOmI,CAAK,EACnB,OAAOiD,EAAMjD,CAAK,EACX,EACT,EAKAtQ,IAAImI,EAAQmI,EAAc0D,EAAU,CAClC,OAAOpB,GAAQzK,EAAQmI,EACrB,IAAM2D,GAAoB9L,EAAQmI,EAAM0D,CAAAA,CAAAA,CAC5C,EAMAlB,yBAAyB3K,EAAQmI,EAAM,CACrC,OAAOnI,EAAO/C,aAAa8O,QACvBnB,QAAQE,IAAIM,EAAOjD,CAAQ,EAAA,CAACrI,WAAY,GAAMkM,aAAc,EAAI,EAAIpW,OACpEgV,QAAQD,yBAAyBS,EAAOjD,CAAK,CACnD,EAKA0C,gBAAiB,CACf,OAAOD,QAAQC,eAAeO,CAAAA,CAChC,EAKAN,IAAI9K,EAAQmI,EAAM,CAChB,OAAOyC,QAAQE,IAAIM,EAAOjD,CAAAA,CAC5B,EAKA6C,SAAU,CACR,OAAOJ,QAAQI,QAAQI,CAAAA,CACzB,EAKAzV,IAAIqK,EAAQmI,EAAMrT,EAAO,CACvBsW,OAAAA,EAAMjD,CAAAA,EAAQrT,EACd,OAAOkL,EAAOmI,CAAK,EACZ,EACT,CACF,CAAA,CACF,CAKO,SAASlL,GACdmO,EACA1V,EAA+B,CAACuW,WAAY,GAAMC,UAAW,EAAI,EACrD,CACZ,GAAM,CAAC7V,YAAAA,EAAcX,EAASuW,WAAY7V,WAAAA,EAAaV,EAASwW,UAAWC,SAAAA,EAAWzW,EAASqW,OAAO,EAAIX,EAC1G,MAAO,CACLW,QAASI,EACTF,WAAY5V,EACZ6V,UAAW9V,EACXgW,aAAcC,GAAWhW,CAAAA,EAAeA,EAAc,IAAMA,EAC5DiW,YAAaD,GAAWjW,CAAAA,EAAcA,EAAa,IAAMA,CAC3D,CACF,CAEA,IAAMmW,GAAU,CAACC,EAAgBlW,IAAiBkW,EAASA,EAASC,GAAYnW,CAAAA,EAAQA,EAClFoW,GAAmB,CAACvE,EAAcrT,IAAmBmL,GAASnL,CAAAA,GAAUqT,IAAS,aACpFvW,OAAOiZ,eAAe/V,CAAW,IAAA,MAAQA,EAAMkI,cAAgBpL,QAElE,SAAS6Y,GACPzK,EACAmI,EACAU,EACA,CACA,GAAIjX,OAAO+a,UAAUC,eAAe3e,KAAK+R,EAAQmI,CAASA,GAAAA,IAAS,cACjE,OAAOnI,EAAOmI,CAAK,EAGrB,IAAMrT,EAAQ+T,EAAAA,EAEd7I,OAAAA,EAAOmI,CAAAA,EAAQrT,EACRA,CACT,CAEA,SAASgX,GACP9L,EACAmI,EACA0D,EACA,CACA,GAAM,CAACN,OAAAA,EAAQC,SAAAA,EAAUC,UAAAA,EAAWxO,aAAcd,CAAW,EAAI6D,EAC7DlL,EAAQyW,EAAOpD,CAAAA,EAGnB,OAAIkE,GAAWvX,CAAAA,GAAUqH,EAAYiQ,aAAajE,CAAO,IACvDrT,EAAQ+X,GAAmB1E,EAAMrT,EAAOkL,EAAQ6L,CAAAA,GAE9CxT,GAAQvD,CAAAA,GAAUA,EAAMxF,SAC1BwF,EAAQgY,GAAc3E,EAAMrT,EAAOkL,EAAQ7D,EAAYmQ,WAAW,GAEhEI,GAAiBvE,EAAMrT,CAAQ,IAEjCA,EAAQqW,GAAerW,EAAO0W,EAAUC,GAAaA,EAAUtD,CAAAA,EAAOhM,CAAAA,GAEjErH,CACT,CAEA,SAAS+X,GACP1E,EACA4E,EACA/M,EACA6L,EACA,CACA,GAAM,CAACN,OAAAA,EAAQC,SAAAA,EAAUC,UAAAA,EAAWC,OAAAA,CAAM,EAAI1L,EAC9C,GAAI0L,EAAOZ,IAAI3C,CAAO,EACpB,MAAM,IAAI6E,MAAM,uBAAyBC,MAAMlX,KAAK2V,CAAAA,EAAQwB,KAAK,IAAQ,EAAA,KAAO/E,CAAM,EAExFuD,EAAOpC,IAAInB,CAAAA,EACX,IAAIrT,EAAQiY,EAASvB,EAAUC,GAAaI,CAAAA,EAC5CH,OAAAA,EAAOyB,OAAOhF,CAAAA,EACVuE,GAAiBvE,EAAMrT,CAAQ,IAEjCA,EAAQsY,GAAkB7B,EAAOpB,QAASoB,EAAQpD,EAAMrT,CAAAA,GAEnDA,CACT,CAEA,SAASgY,GACP3E,EACArT,EACAkL,EACAsM,EACA,CACA,GAAM,CAACf,OAAAA,EAAQC,SAAAA,EAAUC,UAAAA,EAAWxO,aAAcd,CAAW,EAAI6D,EAEjE,GAAI,OAAOwL,EAAShT,MAAU,KAAe8T,EAAYnE,CAAO,EAC9D,OAAOrT,EAAM0W,EAAShT,MAAQ1D,EAAMxF,MAAM,EACrC,GAAI2Q,GAASnL,EAAM,CAAA,CAAE,EAAG,CAE7B,IAAMuY,EAAMvY,EACN4U,EAAS6B,EAAOpB,QAAQmD,OAAOrb,GAAKA,IAAMob,CAAAA,EAChDvY,EAAQ,CAAA,EACR,QAAWyY,KAAQF,EAAK,CACtB,IAAMG,EAAWJ,GAAkB1D,EAAQ6B,EAAQpD,EAAMoF,CAAAA,EACzDzY,EAAM+L,KAAKsK,GAAeqC,EAAUhC,EAAUC,GAAaA,EAAUtD,CAAAA,EAAOhM,CAAAA,CAAAA,CAC9E,EAEF,OAAOrH,CACT,CAEA,SAAS2Y,GACPhF,EACAN,EACArT,EACA,CACA,OAAOuX,GAAW5D,CAAAA,EAAYA,EAASN,EAAMrT,CAAAA,EAAS2T,CACxD,CAEA,IAAMrM,GAAW,CAACE,EAAwBoR,IAAsBpR,IAAQ,GAAOoR,EAC3E,OAAOpR,GAAQ,SAAWqR,GAAiBD,EAAQpR,CAAAA,EAAO1G,OAE9D,SAASgY,GACPjY,EACAkY,EACAvR,EACAwR,EACAhZ,EACA,CACA,QAAW4Y,KAAUG,EAAc,CACjC,IAAMhR,EAAQT,GAASE,EAAKoR,CAAAA,EAC5B,GAAI7Q,EAAO,CACTlH,EAAI2T,IAAIzM,CAAAA,EACR,IAAM4L,EAAWgF,GAAgB5Q,EAAM1G,UAAWmG,EAAKxH,CAAAA,EACvD,GAAI,OAAO2T,EAAa,KAAeA,IAAanM,GAAOmM,IAAaqF,EAGtE,OAAOrF,UAEA5L,IAAU,IAAS,OAAOiR,EAAmB,KAAexR,IAAQwR,EAG7E,OAAO,IAEX,CACA,MAAO,EACT,CAEA,SAASV,GACPS,EACAL,EACArF,EACArT,EACA,CACA,IAAM8U,EAAa4D,EAASpD,YACtB3B,EAAWgF,GAAgBD,EAASrX,UAAWgS,EAAMrT,CAAAA,EACrDiZ,EAAY,CAAIF,GAAAA,EAAiBjE,GAAAA,CAAW,EAC5CjU,EAAM,IAAIgW,IAChBhW,EAAI2T,IAAIxU,CAAAA,EACR,IAAIwH,EAAM0R,GAAiBrY,EAAKoY,EAAW5F,EAAMM,GAAYN,EAAMrT,CAAAA,EAInE,OAHIwH,IAAQ,MAGR,OAAOmM,EAAa,KAAeA,IAAaN,IAClD7L,EAAM0R,GAAiBrY,EAAKoY,EAAWtF,EAAUnM,EAAKxH,CAAAA,EAClDwH,IAAQ,MACH,GAGJmN,GAAgBwD,MAAMlX,KAAKJ,CAAM,EAAA,CAAC,EAAG,EAAEiU,EAAYnB,EACxD,IAAMwF,GAAaT,EAAUrF,EAAgBrT,CAAAA,CAAAA,CACjD,CAEA,SAASkZ,GACPrY,EACAoY,EACAzR,EACAmM,EACA8E,EACA,CACA,KAAOjR,GACLA,EAAMsR,GAAUjY,EAAKoY,EAAWzR,EAAKmM,EAAU8E,CAAAA,EAEjD,OAAOjR,CACT,CAEA,SAAS2R,GACPT,EACArF,EACArT,EACA,CACA,IAAM4Y,EAASF,EAASnD,WAAU,EAC5BlC,KAAQuF,IACZA,EAAOvF,CAAK,EAAG,CAAA,GAEjB,IAAMnI,EAAS0N,EAAOvF,CAAK,EAC3B,OAAI9P,GAAQ2H,CAAWC,GAAAA,GAASnL,CAAQ,EAE/BA,EAEFkL,GAAU,CAAA,CACnB,CAEA,SAAS0K,GACPvC,EACAwB,EACAD,EACA0B,EACA,CACA,IAAItW,EACJ,QAAW0X,KAAU7C,EAEnB,GADA7U,EAAQiV,GAASwC,GAAQC,EAAQrE,CAAOuB,EAAAA,CAAAA,EACpC,OAAO5U,EAAU,IACnB,OAAO4X,GAAiBvE,EAAMrT,CAC1BsY,EAAAA,GAAkB1D,EAAQ0B,EAAOjD,EAAMrT,CAAAA,EACvCA,CAGV,CAEA,SAASiV,GAASzN,EAAaoN,EAAqB,CAClD,QAAW7M,KAAS6M,EAAQ,CAC1B,GAAI,CAAC7M,EACH,SAEF,IAAM/H,EAAQ+H,EAAMP,CAAI,EACxB,GAAI,OAAOxH,EAAU,IACnB,OAAOA,CAEX,CACF,CAEA,SAASiW,GAAqB/K,EAAuB,CACnD,IAAIzD,EAAOyD,EAAOwK,MAClB,OAAKjO,IACHA,EAAOyD,EAAOwK,MAAQ0D,GAAyBlO,EAAOmK,OAAO,GAExD5N,CACT,CAEA,SAAS2R,GAAyBxE,EAAqB,CACrD,IAAM/T,EAAM,IAAIgW,IAChB,QAAW9O,KAAS6M,EAClB,QAAWpN,KAAO1K,OAAO2K,KAAKM,CAAOyQ,EAAAA,OAAO3Q,GAAK,CAACA,EAAEX,WAAW,GAAO,CAAA,EACpErG,EAAI2T,IAAIhN,CAAAA,EAGZ,OAAO2Q,MAAMlX,KAAKJ,CAAAA,CACpB,CAEO,SAASwY,GACdjf,EACAqR,EACA5R,EACAY,EACA,CACA,GAAM,CAACE,OAAAA,CAAM,EAAIP,EACX,CAACoN,IAAAA,EAAM,GAAA,EAAO,KAAK8R,SACnBC,EAAS,IAAIpB,MAAoB1d,CAAAA,EACnCkN,EAAW0E,EAAc3I,EAAe+U,EAE5C,IAAK9Q,EAAI,EAAG0E,EAAO5R,EAAOkN,EAAI0E,EAAM,EAAE1E,EACpCjE,EAAQiE,EAAI9N,EACZ4e,EAAOhN,EAAK/H,CAAM,EAClB6V,EAAO5R,CAAAA,EAAK,CACV6R,EAAG7e,EAAO8e,MAAMZ,GAAiBJ,EAAMjR,CAAM9D,EAAAA,CAAAA,CAC/C,EAEF,OAAO6V,CACT,CClcA,IAAMG,GAAUvH,OAAOuH,SAAW,MAG5BC,GAAW,CAACtf,EAAuBsN,IAAmCA,EAAItN,EAAOG,QAAU,CAACH,EAAOsN,CAAE,EAACiS,MAAQvf,EAAOsN,CAAE,EACvHkS,GAAgBpQ,GAAyBA,IAAc,IAAM,IAAM,IAElE,SAASqQ,GACdC,EACAC,EACAC,EACAhd,EAIE,CAMF,IAAM4S,EAAWkK,EAAWH,KAAOI,EAAcD,EAC3CG,EAAUF,EACVG,EAAOF,EAAWL,KAAOI,EAAcC,EACvCG,EAAMC,GAAsBH,EAASrK,CAAAA,EACrCyK,EAAMD,GAAsBF,EAAMD,CAAAA,EAEpCK,EAAMH,GAAOA,EAAME,GACnBE,EAAMF,GAAOF,EAAME,GAGvBC,EAAMlW,MAAMkW,CAAO,EAAA,EAAIA,EACvBC,EAAMnW,MAAMmW,CAAO,EAAA,EAAIA,EAEvB,IAAMC,EAAKxd,EAAIsd,EACTG,EAAKzd,EAAIud,EAEf,MAAO,CACL3K,SAAU,CACRpC,EAAGyM,EAAQzM,EAAIgN,GAAMN,EAAK1M,EAAIoC,EAASpC,GACvCC,EAAGwM,EAAQxM,EAAI+M,GAAMN,EAAKzM,EAAImC,EAASnC,EACzC,EACAyM,KAAM,CACJ1M,EAAGyM,EAAQzM,EAAIiN,GAAMP,EAAK1M,EAAIoC,EAASpC,GACvCC,EAAGwM,EAAQxM,EAAIgN,GAAMP,EAAKzM,EAAImC,EAASnC,EACzC,CACF,CACF,CAKA,SAASiN,GAAetgB,EAAuBugB,EAAkBC,EAAc,CAC7E,IAAMC,EAAYzgB,EAAOG,OAErBugB,EAAgBC,EAAeC,EAAcC,EAA0BC,EACvEC,EAAazB,GAAStf,EAAQ,CAAA,EAClC,QAASsN,EAAI,EAAGA,EAAImT,EAAY,EAAG,EAAEnT,EAGnC,GAFAwT,EAAeC,EACfA,EAAazB,GAAStf,EAAQsN,EAAI,CAAA,EAC9B,GAACwT,GAAgB,CAACC,GAItB,IAAIC,GAAaT,EAAOjT,CAAE,EAAE,EAAG+R,EAAU,EAAA,CACvCmB,EAAGlT,CAAE,EAAGkT,EAAGlT,EAAI,CAAA,EAAK,EACpB,SAGFoT,EAASF,EAAGlT,CAAAA,EAAKiT,EAAOjT,CAAE,EAC1BqT,EAAQH,EAAGlT,EAAI,CAAA,EAAKiT,EAAOjT,CAAE,EAC7BuT,EAAmB3f,KAAK8B,IAAI0d,EAAQ,CAAA,EAAKxf,KAAK8B,IAAI2d,EAAO,CAAA,EACrDE,EAAAA,GAAoB,KAIxBD,EAAO,EAAI1f,KAAK0D,KAAKic,CAAAA,EACrBL,EAAGlT,CAAE,EAAGoT,EAASE,EAAOL,EAAOjT,CAAE,EACjCkT,EAAGlT,EAAI,CAAE,EAAGqT,EAAQC,EAAOL,EAAOjT,CAAE,GAExC,CAEA,SAAS2T,GAAgBjhB,EAAuBwgB,EAAcpR,EAAuB,IAAK,CACxF,IAAM8R,EAAY1B,GAAapQ,CAAAA,EACzBqR,EAAYzgB,EAAOG,OACrBsJ,EAAe0X,EAAkCL,EACjDC,EAAazB,GAAStf,EAAQ,CAAA,EAElC,QAASsN,EAAI,EAAGA,EAAImT,EAAW,EAAEnT,EAAG,CAIlC,GAHA6T,EAAcL,EACdA,EAAeC,EACfA,EAAazB,GAAStf,EAAQsN,EAAI,CAAA,EAC9B,CAACwT,EACH,SAGF,IAAMM,EAASN,EAAa1R,CAAU,EAChCiS,EAASP,EAAaI,CAAU,EAClCC,IACF1X,GAAS2X,EAASD,EAAY/R,CAAAA,GAAc,EAC5C0R,EAAa,MAAM1R,CAAAA,EAAW,EAAIgS,EAAS3X,EAC3CqX,EAAa,MAAMI,CAAU,EAAC,EAAIG,EAAS5X,EAAQ+W,EAAGlT,CAAE,GAEtDyT,IACFtX,GAASsX,EAAW3R,CAAU,EAAGgS,GAAU,EAC3CN,EAAa,MAAM1R,CAAAA,EAAW,EAAIgS,EAAS3X,EAC3CqX,EAAa,MAAMI,CAAU,EAAC,EAAIG,EAAS5X,EAAQ+W,EAAGlT,CAAE,EAE5D,CACF,CAQO,SAASgU,GAAoBthB,EAAuBoP,EAAuB,IAAK,CACrF,IAAM8R,EAAY1B,GAAapQ,CAAAA,EACzBqR,EAAYzgB,EAAOG,OACnBogB,EAAmBzC,MAAM2C,CAAW1L,EAAAA,KAAK,CAAA,EACzCyL,EAAe1C,MAAM2C,CAAAA,EAGvBnT,EAAG6T,EAAkCL,EACrCC,EAAazB,GAAStf,EAAQ,CAAA,EAElC,IAAKsN,EAAI,EAAGA,EAAImT,EAAW,EAAEnT,EAI3B,GAHA6T,EAAcL,EACdA,EAAeC,EACfA,EAAazB,GAAStf,EAAQsN,EAAI,CAAA,EAC9B,EAACwT,EAIL,IAAIC,EAAY,CACd,IAAMQ,EAAaR,EAAW3R,CAAAA,EAAa0R,EAAa1R,CAAU,EAGlEmR,EAAOjT,CAAE,EAAGiU,IAAe,GAAKR,EAAWG,CAAAA,EAAaJ,EAAaI,CAAAA,GAAcK,EAAa,EAElGf,EAAGlT,CAAE,EAAI6T,EACJJ,EACES,GAAKjB,EAAOjT,EAAI,CAAA,CAAE,IAAMkU,GAAKjB,EAAOjT,CAAE,CAAA,EAAK,GACzCiT,EAAOjT,EAAI,CAAA,EAAKiT,EAAOjT,CAAE,GAAI,EAFpBiT,EAAOjT,EAAI,CAAA,EADNiT,EAAOjT,CAAE,EAMlCgT,GAAetgB,EAAQugB,EAAQC,CAAAA,EAE/BS,GAAgBjhB,EAAQwgB,EAAIpR,CAAAA,CAC9B,CAEA,SAASqS,GAAgBC,EAAY7gB,EAAaC,EAAa,CAC7D,OAAOI,KAAKJ,IAAII,KAAKL,IAAI6gB,EAAI5gB,CAAMD,EAAAA,CAAAA,CACrC,CAEA,SAAS8gB,GAAgB3hB,EAAuBmV,EAAiB,CAC/D,IAAI7H,EAAG0E,EAAMtQ,EAAOkgB,EAAQC,EACxBC,EAAa5M,GAAelV,EAAO,CAAA,EAAImV,CAAAA,EAC3C,IAAK7H,EAAI,EAAG0E,EAAOhS,EAAOG,OAAQmN,EAAI0E,EAAM,EAAE1E,EAC5CuU,EAAaD,EACbA,EAASE,EACTA,EAAaxU,EAAI0E,EAAO,GAAKkD,GAAelV,EAAOsN,EAAI,CAAA,EAAI6H,CAAAA,EACtDyM,IAGLlgB,EAAQ1B,EAAOsN,CAAE,EACbuU,IACFngB,EAAMmU,KAAO4L,GAAgB/f,EAAMmU,KAAMV,EAAKxV,KAAMwV,EAAKvV,KAAK,EAC9D8B,EAAMqU,KAAO0L,GAAgB/f,EAAMqU,KAAMZ,EAAKnN,IAAKmN,EAAKlN,MAAM,GAE5D6Z,IACFpgB,EAAMoU,KAAO2L,GAAgB/f,EAAMoU,KAAMX,EAAKxV,KAAMwV,EAAKvV,KAAK,EAC9D8B,EAAMsU,KAAOyL,GAAgB/f,EAAMsU,KAAMb,EAAKnN,IAAKmN,EAAKlN,MAAM,GAGpE,CAKO,SAAS8Z,GACd/hB,EACAW,EACAwU,EACAtO,EACAuI,EACA,CACA,IAAI9B,EAAW0E,EAActQ,EAAoBsgB,EAOjD,GAJIrhB,EAAQF,WACVT,EAASA,EAAOme,OAAQuD,GAAO,CAACA,EAAGnC,IAAI,GAGrC5e,EAAQshB,yBAA2B,WACrCX,GAAoBthB,EAAQoP,CAAAA,MACvB,CACL,IAAI8S,EAAOrb,EAAO7G,EAAOA,EAAOG,OAAS,CAAE,EAAGH,EAAO,CAAE,EACvD,IAAKsN,EAAI,EAAG0E,EAAOhS,EAAOG,OAAQmN,EAAI0E,EAAM,EAAE1E,EAC5C5L,EAAQ1B,EAAOsN,CAAE,EACjB0U,EAAgBvC,GACdyC,EACAxgB,EACA1B,EAAOkB,KAAKL,IAAIyM,EAAI,EAAG0E,GAAQnL,EAAO,EAAI,EAAA,EAAMmL,CAAK,EACrDrR,EAAQwhB,OAAO,EAEjBzgB,EAAMmU,KAAOmM,EAAcxM,SAASpC,EACpC1R,EAAMqU,KAAOiM,EAAcxM,SAASnC,EACpC3R,EAAMoU,KAAOkM,EAAclC,KAAK1M,EAChC1R,EAAMsU,KAAOgM,EAAclC,KAAKzM,EAChC6O,EAAOxgB,EAIPf,EAAQghB,iBACVA,GAAgB3hB,EAAQmV,CAAAA,CAE5B,CCtNO,SAASiN,IAA2B,CACzC,OAAO,OAAO/jB,OAAW,KAAe,OAAOgkB,SAAa,GAC9D,CAKO,SAASC,GAAeC,EAA+C,CAC5E,IAAIhE,EAASgE,EAAQC,WACrB,OAAIjE,GAAUA,EAAO1Y,SAAQ,IAAO,wBAClC0Y,EAAUA,EAAsBkE,MAE3BlE,CACT,CAOA,SAASmE,GAAcC,EAA6BzV,EAAmB0V,EAAwB,CAC7F,IAAIC,EACJ,OAAI,OAAOF,GAAe,UACxBE,EAAgBtJ,SAASoJ,EAAY,EAAA,EAEjCA,EAAWG,QAAQ,GAAA,IAAS,KAE9BD,EAAgBA,EAAiB,IAAO3V,EAAKsV,WAAWI,CAAe,IAGzEC,EAAgBF,EAGXE,CACT,CAEA,IAAME,GAAoBC,GACxBA,EAAQC,cAAcC,YAAYH,iBAAiBC,EAAS,IAAI,EAE3D,SAASG,GAASC,EAAiBC,EAA0B,CAClE,OAAON,GAAiBK,CAAIE,EAAAA,iBAAiBD,CAAAA,CAC/C,CAEA,IAAME,GAAY,CAAC,MAAO,QAAS,SAAU,MAAO,EACpD,SAASC,GAAmBC,EAA6B7U,EAAe8U,EAA4B,CAClG,IAAMC,EAAS,CAAA,EACfD,EAASA,EAAS,IAAMA,EAAS,GACjC,QAASpW,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAMsW,EAAML,GAAUjW,CAAE,EACxBqW,EAAOC,CAAI,EAAGC,WAAWJ,EAAO7U,EAAQ,IAAMgV,EAAMF,CAAAA,CAAO,GAAK,CAClE,CACAC,OAAAA,EAAOhY,MAAQgY,EAAOhkB,KAAOgkB,EAAO/jB,MACpC+jB,EAAOzQ,OAASyQ,EAAO3b,IAAM2b,EAAO1b,OAC7B0b,CACT,CAEA,IAAMG,GAAe,CAAC1Q,EAAWC,EAAWxC,KACzCuC,EAAI,GAAKC,EAAI,KAAO,CAACxC,GAAU,CAACA,EAAwBkT,YAO3D,SAASC,GACPC,EACAnR,EAKE,CACF,IAAMoR,EAAUD,EAAkBC,QAC5BC,EAAUD,GAAWA,EAAQ/jB,OAAS+jB,EAAQ,CAAE,EAAGD,EACnD,CAACG,QAAAA,EAASC,QAAAA,CAAAA,EAAWF,EACvBG,EAAM,GACNlR,EAAGC,EACP,GAAIyQ,GAAaM,EAASC,EAASJ,EAAEpT,MAAM,EACzCuC,EAAIgR,EACJ/Q,EAAIgR,MACC,CACL,IAAMvP,EAAOhC,EAAOyR,sBAAqB,EACzCnR,EAAI+Q,EAAOK,QAAU1P,EAAKnV,KAC1B0T,EAAI8Q,EAAOM,QAAU3P,EAAK9M,IAC1Bsc,EAAM,GAER,MAAO,CAAClR,EAAAA,EAAGC,EAAAA,EAAGiR,IAAAA,CAAG,CACnB,CASO,SAASI,GACdC,EACApb,EAC0B,CAC1B,GAAI,WAAYob,EACd,OAAOA,EAGT,GAAM,CAAC7R,OAAAA,EAAQJ,wBAAAA,CAAAA,EAA2BnJ,EACpCqF,EAAQmU,GAAiBjQ,CAAAA,EACzB8R,EAAYhW,EAAMiW,YAAc,aAChCC,EAAWtB,GAAmB5U,EAAO,SAAA,EACrCmW,EAAUvB,GAAmB5U,EAAO,SAAU,OAAA,EAC9C,CAACwE,EAAAA,EAAGC,EAAAA,EAAGiR,IAAAA,CAAG,EAAIN,GAAkBW,EAAO7R,CAAAA,EACvCU,EAAUsR,EAASnlB,MAAQ2kB,GAAOS,EAAQplB,MAC1C8T,EAAUqR,EAAS9c,KAAOsc,GAAOS,EAAQ/c,KAE3C,CAAC2D,MAAAA,EAAOuH,OAAAA,CAAAA,EAAU3J,EACtB,OAAIqb,IACFjZ,GAASmZ,EAASnZ,MAAQoZ,EAAQpZ,MAClCuH,GAAU4R,EAAS5R,OAAS6R,EAAQ7R,QAE/B,CACLE,EAAGlS,KAAK0R,OAAOQ,EAAII,GAAW7H,EAAQmH,EAAOnH,MAAQ+G,CAAAA,EACrDW,EAAGnS,KAAK0R,OAAOS,EAAII,GAAWP,EAASJ,EAAOI,OAASR,CAAAA,CACzD,CACF,CAEA,SAASsS,GAAiBlS,EAA2BnH,EAAeuH,EAAgC,CAClG,IAAI0E,EAAkBqN,EAEtB,GAAItZ,IAAUlF,QAAayM,IAAWzM,OAAW,CAC/C,IAAMye,EAAYpS,GAAUwP,GAAexP,CAAAA,EAC3C,GAAI,CAACoS,EACHvZ,EAAQmH,EAAOqS,YACfjS,EAASJ,EAAOsS,iBACX,CACL,IAAMtQ,EAAOoQ,EAAUX,sBAAqB,EACtCc,EAAiBtC,GAAiBmC,CAAAA,EAClCI,EAAkB9B,GAAmB6B,EAAgB,SAAU,OAAA,EAC/DE,EAAmB/B,GAAmB6B,EAAgB,SAAA,EAC5D1Z,EAAQmJ,EAAKnJ,MAAQ4Z,EAAiB5Z,MAAQ2Z,EAAgB3Z,MAC9DuH,EAAS4B,EAAK5B,OAASqS,EAAiBrS,OAASoS,EAAgBpS,OACjE0E,EAAW8K,GAAc2C,EAAezN,SAAUsN,EAAW,aAAA,EAC7DD,EAAYvC,GAAc2C,EAAeJ,UAAWC,EAAW,cAAA,GAGnE,MAAO,CACLvZ,MAAAA,EACAuH,OAAAA,EACA0E,SAAUA,GAAY4N,GACtBP,UAAWA,GAAaO,EAC1B,CACF,CAEA,IAAMC,GAAU7d,GAAc1G,KAAK0R,MAAMhL,EAAI,EAAM,EAAA,GAG5C,SAAS8d,GACd5S,EACA6S,EACAC,EACAC,EACmC,CACnC,IAAMjX,EAAQmU,GAAiBjQ,CAAAA,EACzBgT,EAAUtC,GAAmB5U,EAAO,QAAA,EACpCgJ,EAAW8K,GAAc9T,EAAMgJ,SAAU9E,EAAQ,aAAkB0S,GAAAA,GACnEP,EAAYvC,GAAc9T,EAAMqW,UAAWnS,EAAQ,cAAmB0S,GAAAA,GACtEO,EAAgBf,GAAiBlS,EAAQ6S,EAASC,CAAAA,EACpD,CAACja,MAAAA,EAAOuH,OAAAA,CAAAA,EAAU6S,EAEtB,GAAInX,EAAMiW,YAAc,cAAe,CACrC,IAAME,EAAUvB,GAAmB5U,EAAO,SAAU,OAAA,EAC9CkW,EAAWtB,GAAmB5U,EAAO,SAAA,EAC3CjD,GAASmZ,EAASnZ,MAAQoZ,EAAQpZ,MAClCuH,GAAU4R,EAAS5R,OAAS6R,EAAQ7R,OAEtCvH,OAAAA,EAAQzK,KAAKJ,IAAI,EAAG6K,EAAQma,EAAQna,KAAK,EACzCuH,EAAShS,KAAKJ,IAAI,EAAG+kB,EAAcla,EAAQka,EAAc3S,EAAS4S,EAAQ5S,MAAM,EAChFvH,EAAQ8Z,GAAOvkB,KAAKL,IAAI8K,EAAOiM,EAAUmO,EAAcnO,QAAQ,CAAA,EAC/D1E,EAASuS,GAAOvkB,KAAKL,IAAIqS,EAAQ+R,EAAWc,EAAcd,SAAS,CAAA,EAC/DtZ,GAAS,CAACuH,IAGZA,EAASuS,GAAO9Z,EAAQ,CAAA,IAGHga,IAAYlf,QAAamf,IAAanf,SAEvCof,GAAeE,EAAc7S,QAAUA,EAAS6S,EAAc7S,SAClFA,EAAS6S,EAAc7S,OACvBvH,EAAQ8Z,GAAOvkB,KAAK+I,MAAMiJ,EAAS2S,CAAAA,CAAAA,GAG9B,CAACla,MAAAA,EAAOuH,OAAAA,CAAM,CACvB,CAQO,SAAS8S,GACdzc,EACA0c,EACAC,EACgB,CAChB,IAAMC,EAAaF,GAAc,EAC3BG,EAAellB,KAAK+I,MAAMV,EAAM2J,OAASiT,CAAAA,EACzCE,EAAcnlB,KAAK+I,MAAMV,EAAMoC,MAAQwa,CAAAA,EAE5C5c,EAAuB2J,OAAShS,KAAK+I,MAAMV,EAAM2J,MAAM,EACvD3J,EAAuBoC,MAAQzK,KAAK+I,MAAMV,EAAMoC,KAAK,EAEtD,IAAMmH,EAASvJ,EAAMuJ,OAUrB,OALIA,EAAOlE,QAAUsX,GAAe,CAACpT,EAAOlE,MAAMsE,QAAU,CAACJ,EAAOlE,MAAMjD,SACxEmH,EAAOlE,MAAMsE,OAAS,GAAG3J,EAAM2J,MAAM,KACrCJ,EAAOlE,MAAMjD,MAAQ,GAAGpC,EAAMoC,KAAK,MAGjCpC,EAAMmJ,0BAA4ByT,GAC/BrT,EAAOI,SAAWkT,GAClBtT,EAAOnH,QAAU0a,GACrB9c,EAAuBmJ,wBAA0ByT,EAClDrT,EAAOI,OAASkT,EAChBtT,EAAOnH,MAAQ0a,EACf9c,EAAM0F,IAAIqX,aAAaH,EAAY,EAAG,EAAGA,EAAY,EAAG,CAAA,EACjD,IAEF,EACT,CAOaI,IAAAA,GAAgC,UAAW,CACtD,IAAIC,EAAmB,GACvB,GAAI,CACF,IAAM7lB,EAAU,CACd,IAAI8lB,SAAU,CACZD,OAAAA,EAAmB,GACZ,EACT,CACF,EAEIpE,GAAmB,IACrB/jB,OAAOqoB,iBAAiB,OAAQ,KAAM/lB,CAAAA,EACtCtC,OAAOsoB,oBAAoB,OAAQ,KAAMhmB,CAAAA,EAE7C,MAAY,CAEZ,CACA,OAAO6lB,CACT,EAAK,EAYE,SAASI,GACd5D,EACAK,EACoB,CACpB,IAAM1d,EAAQwd,GAASH,EAASK,CAAAA,EAC1B7K,EAAU7S,GAASA,EAAM8S,MAAM,mBAAA,EACrC,OAAOD,EAAU,CAACA,EAAQ,CAAA,EAAK/R,MACjC,CCtRO,SAASogB,GAAaC,EAAWC,EAAWnkB,EAAW0M,EAAO,CACnE,MAAO,CACL8D,EAAG0T,EAAG1T,EAAIxQ,GAAKmkB,EAAG3T,EAAI0T,EAAG1T,GACzBC,EAAGyT,EAAGzT,EAAIzQ,GAAKmkB,EAAG1T,EAAIyT,EAAGzT,EAC3B,CACF,CAKO,SAAS2T,GACdF,EACAC,EACAnkB,EAAW0M,EACX,CACA,MAAO,CACL8D,EAAG0T,EAAG1T,EAAIxQ,GAAKmkB,EAAG3T,EAAI0T,EAAG1T,GACzBC,EAAG/D,IAAS,SAAW1M,EAAI,GAAMkkB,EAAGzT,EAAI0T,EAAG1T,EACvC/D,IAAS,QAAU1M,EAAI,EAAIkkB,EAAGzT,EAAI0T,EAAG1T,EACnCzQ,EAAI,EAAImkB,EAAG1T,EAAIyT,EAAGzT,CAC1B,CACF,CAKO,SAAS4T,GAAqBH,EAAiBC,EAAiBnkB,EAAW0M,EAAO,CACvF,IAAM4X,EAAM,CAAC9T,EAAG0T,EAAGhR,KAAMzC,EAAGyT,EAAG9Q,IAAI,EAC7BmR,EAAM,CAAC/T,EAAG2T,EAAGlR,KAAMxC,EAAG0T,EAAGhR,IAAI,EAC7BqR,EAAIP,GAAaC,EAAII,EAAKtkB,CAAAA,EAC1BykB,EAAIR,GAAaK,EAAKC,EAAKvkB,CAAAA,EAC3B0kB,EAAIT,GAAaM,EAAKJ,EAAInkB,CAAAA,EAC1B2C,EAAIshB,GAAaO,EAAGC,EAAGzkB,CAAAA,EACvBqhB,EAAI4C,GAAaQ,EAAGC,EAAG1kB,CAAAA,EAC7B,OAAOikB,GAAathB,EAAG0e,EAAGrhB,CAAAA,CAC5B,CChCA,IAAM2kB,GAAwB,SAASC,EAAe7b,EAA2B,CAC/E,MAAO,CACLyH,EAAEA,EAAG,CACH,OAAOoU,EAAQA,EAAQ7b,EAAQyH,CACjC,EACAqU,SAASlU,EAAG,CACV5H,EAAQ4H,CACV,EACA8C,UAAU/W,EAAO,CACf,OAAIA,IAAU,SACLA,EAEFA,IAAU,QAAU,OAAS,OACtC,EACAooB,MAAMtU,EAAGzN,EAAO,CACd,OAAOyN,EAAIzN,CACb,EACAgiB,WAAWvU,EAAGwU,EAAW,CACvB,OAAOxU,EAAIwU,CACb,CACF,CACF,EAEMC,GAAwB,UAAuB,CACnD,MAAO,CACLzU,EAAEA,EAAG,CACH,OAAOA,CACT,EACAqU,SAASlU,EAAG,CAAA,EAEZ8C,UAAU/W,EAAO,CACf,OAAOA,CACT,EACAooB,MAAMtU,EAAGzN,EAAO,CACd,OAAOyN,EAAIzN,CACb,EACAgiB,WAAWvU,EAAG0U,EAAY,CACxB,OAAO1U,CACT,CACF,CACF,EAEO,SAAS2U,GAAcloB,EAAc2nB,EAAe7b,EAAe,CACxE,OAAO9L,EAAM0nB,GAAsBC,EAAO7b,CAAAA,EAASkc,GAAuB,CAC5E,CAEO,SAASG,GAAsB/Y,EAA+BgZ,EAA0B,CAC7F,IAAIrZ,EAA4BsZ,GAC5BD,IAAc,OAASA,IAAc,SACvCrZ,EAAQK,EAAI6D,OAAOlE,MACnBsZ,EAAW,CACTtZ,EAAM0U,iBAAiB,WAAA,EACvB1U,EAAMuZ,oBAAoB,WAAA,CAC3B,EAEDvZ,EAAMwZ,YAAY,YAAaH,EAAW,WAAA,EACzChZ,EAAiDoZ,kBAAoBH,EAE1E,CAEO,SAASI,GAAqBrZ,EAA+BiZ,EAA6B,CAC3FA,IAAazhB,SACf,OAAQwI,EAAiDoZ,kBACzDpZ,EAAI6D,OAAOlE,MAAMwZ,YAAY,YAAaF,EAAS,CAAA,EAAIA,EAAS,CAAE,CAAA,EAEtE,CC/DA,SAASK,GAAWlF,EAAU,CAC5B,OAAIA,IAAa,QACR,CACLmF,QAASC,GACTC,QAASC,GACTC,UAAWC,EACb,EAEK,CACLL,QAASM,GACTJ,QAAS,CAACtB,EAAGC,IAAMD,EAAIC,EACvBuB,UAAWxV,GAAKA,CAClB,CACF,CAEA,SAAS2V,GAAiB,CAACvpB,MAAAA,EAAOC,IAAAA,EAAKW,MAAAA,EAAOyG,KAAAA,EAAM+H,MAAAA,CAAK,EAAG,CAC1D,MAAO,CACLpP,MAAOA,EAAQY,EACfX,IAAKA,EAAMW,EACXyG,KAAMA,IAASpH,EAAMD,EAAQ,GAAKY,IAAU,EAC5CwO,MAAAA,CACF,CACF,CAEA,SAASoa,GAAWC,EAASjpB,EAAQ6K,EAAQ,CAC3C,GAAM,CAACwY,SAAAA,EAAU7jB,MAAO0pB,EAAYzpB,IAAK0pB,CAAQ,EAAIte,EAC/C,CAAC2d,QAAAA,EAASI,UAAAA,CAAS,EAAIL,GAAWlF,CAAAA,EAClCjjB,EAAQJ,EAAOG,OAEjB,CAACX,MAAAA,EAAOC,IAAAA,EAAKoH,KAAAA,CAAAA,EAAQoiB,EACrB3b,EAAG0E,EAEP,GAAInL,EAAM,CAGR,IAFArH,GAASY,EACTX,GAAOW,EACFkN,EAAI,EAAG0E,EAAO5R,EAAOkN,EAAI0E,GACvBwW,EAAQI,EAAU5oB,EAAOR,EAAQY,CAAAA,EAAOijB,CAAAA,CAAS,EAAG6F,EAAYC,CAAW,EAD9C,EAAE7b,EAIpC9N,IACAC,IAEFD,GAASY,EACTX,GAAOW,EAGT,OAAIX,EAAMD,IACRC,GAAOW,GAEF,CAACZ,MAAAA,EAAOC,IAAAA,EAAKoH,KAAAA,EAAM+H,MAAOqa,EAAQra,KAAK,CAChD,CAgBO,SAASwa,GAAcH,EAASjpB,EAAQ6K,EAAQ,CACrD,GAAI,CAACA,EACH,MAAO,CAACoe,CAAQ,EAGlB,GAAM,CAAC5F,SAAAA,EAAU7jB,MAAO0pB,EAAYzpB,IAAK0pB,CAAQ,EAAIte,EAC/CzK,EAAQJ,EAAOG,OACf,CAACuoB,QAAAA,EAASF,QAAAA,EAASI,UAAAA,CAAS,EAAIL,GAAWlF,CAAAA,EAC3C,CAAC7jB,MAAAA,EAAOC,IAAAA,EAAKoH,KAAAA,EAAM+H,MAAAA,CAAAA,EAASoa,GAAWC,EAASjpB,EAAQ6K,CAAAA,EAExD8Y,EAAS,CAAA,EACX0F,EAAS,GACTC,EAAW,KACX3jB,EAAOjE,EAAO6nB,EAEZC,EAAgB,IAAMhB,EAAQU,EAAYK,EAAW5jB,CAAU+iB,GAAAA,EAAQQ,EAAYK,CAAe,IAAA,EAClGE,EAAc,IAAMf,EAAQS,EAAUxjB,CAAAA,IAAW,GAAK6iB,EAAQW,EAAUI,EAAW5jB,CAAAA,EACnF+jB,EAAc,IAAML,GAAUG,EAAAA,EAC9BG,EAAa,IAAM,CAACN,GAAUI,EAAAA,EAEpC,QAASnc,EAAI9N,EAAO0iB,EAAO1iB,EAAO8N,GAAK7N,EAAK,EAAE6N,EAC5C5L,EAAQ1B,EAAOsN,EAAIlN,CAAM,EAErBsB,CAAAA,EAAM6d,OAIV5Z,EAAQijB,EAAUlnB,EAAM2hB,CAAS,CAAA,EAE7B1d,IAAU4jB,IAIdF,EAASb,EAAQ7iB,EAAOujB,EAAYC,CAAAA,EAEhCG,IAAa,MAAQI,EAAe,IACtCJ,EAAWZ,EAAQ/iB,EAAOujB,CAAgB,IAAA,EAAI5b,EAAI4U,GAGhDoH,IAAa,MAAQK,EAAc,IACrChG,EAAOjS,KAAKqX,GAAiB,CAACvpB,MAAO8pB,EAAU7pB,IAAK6N,EAAGzG,KAAAA,EAAMzG,MAAAA,EAAOwO,MAAAA,CAAK,CAAA,CAAA,EACzE0a,EAAW,MAEbpH,EAAO5U,EACPic,EAAY5jB,IAGd,OAAI2jB,IAAa,MACf3F,EAAOjS,KAAKqX,GAAiB,CAACvpB,MAAO8pB,EAAU7pB,IAAAA,EAAKoH,KAAAA,EAAMzG,MAAAA,EAAOwO,MAAAA,CAAK,CAAA,CAAA,EAGjE+U,CACT,CAYO,SAASiG,GAAepT,EAAM3L,EAAQ,CAC3C,IAAM8Y,EAAS,CAAA,EACTkG,EAAWrT,EAAKqT,SAEtB,QAASvc,EAAI,EAAGA,EAAIuc,EAAS1pB,OAAQmN,IAAK,CACxC,IAAMwc,EAAMV,GAAcS,EAASvc,CAAAA,EAAIkJ,EAAKxW,OAAQ6K,CAAAA,EAChDif,EAAI3pB,QACNwjB,EAAOjS,KAAQoY,GAAAA,CAAAA,CAEnB,CACA,OAAOnG,CACT,CAKA,SAASoG,GAAgB/pB,EAAQI,EAAOyG,EAAMpG,EAAU,CACtD,IAAIjB,EAAQ,EACRC,EAAMW,EAAQ,EAElB,GAAIyG,GAAQ,CAACpG,EAEX,KAAOjB,EAAQY,GAAS,CAACJ,EAAOR,CAAM,EAAC+f,MACrC/f,IAKJ,KAAOA,EAAQY,GAASJ,EAAOR,CAAM,EAAC+f,MACpC/f,IAWF,IAPAA,GAASY,EAELyG,IAEFpH,GAAOD,GAGFC,EAAMD,GAASQ,EAAOP,EAAMW,CAAM,EAACmf,MACxC9f,IAIFA,OAAAA,GAAOW,EAEA,CAACZ,MAAAA,EAAOC,IAAAA,CAAG,CACpB,CASA,SAASuqB,GAAchqB,EAAQR,EAAOsB,EAAK+F,EAAM,CAC/C,IAAMzG,EAAQJ,EAAOG,OACfwjB,EAAS,CAAA,EACXsG,EAAOzqB,EACP0iB,EAAOliB,EAAOR,CAAM,EACpBC,EAEJ,IAAKA,EAAMD,EAAQ,EAAGC,GAAOqB,EAAK,EAAErB,EAAK,CACvC,IAAMyqB,EAAMlqB,EAAOP,EAAMW,CAAM,EAC3B8pB,EAAI3K,MAAQ2K,EAAIC,KACbjI,EAAK3C,OACR1Y,EAAO,GACP8c,EAAOjS,KAAK,CAAClS,MAAOA,EAAQY,EAAOX,KAAMA,EAAM,GAAKW,EAAOyG,KAAAA,CAAI,CAAA,EAE/DrH,EAAQyqB,EAAOC,EAAIC,KAAO1qB,EAAM,OAGlCwqB,EAAOxqB,EACHyiB,EAAK3C,OACP/f,EAAQC,IAGZyiB,EAAOgI,CACT,CAEA,OAAID,IAAS,MACXtG,EAAOjS,KAAK,CAAClS,MAAOA,EAAQY,EAAOX,IAAKwqB,EAAO7pB,EAAOyG,KAAAA,CAAI,CAAA,EAGrD8c,CACT,CAUO,SAASyG,GAAiB5T,EAAM6T,EAAgB,CACrD,IAAMrqB,EAASwW,EAAKxW,OACdS,EAAW+V,EAAK7V,QAAQF,SACxBL,EAAQJ,EAAOG,OAErB,GAAI,CAACC,EACH,MAAO,CAAA,EAGT,IAAMyG,EAAO,CAAC,CAAC2P,EAAK8T,MACd,CAAC9qB,MAAAA,EAAOC,IAAAA,CAAAA,EAAOsqB,GAAgB/pB,EAAQI,EAAOyG,EAAMpG,CAAAA,EAE1D,GAAIA,IAAa,GACf,OAAO8pB,GAAc/T,EAAM,CAAC,CAAChX,MAAAA,EAAOC,IAAAA,EAAKoH,KAAAA,CAAI,CAAE,EAAE7G,EAAQqqB,CAAAA,EAG3D,IAAMvpB,EAAMrB,EAAMD,EAAQC,EAAMW,EAAQX,EAClC+qB,EAAe,CAAC,CAAChU,EAAKiU,WAAajrB,IAAU,GAAKC,IAAQW,EAAQ,EACxE,OAAOmqB,GAAc/T,EAAMwT,GAAchqB,EAAQR,EAAOsB,EAAK0pB,CAAAA,EAAexqB,EAAQqqB,CAAAA,CACtF,CAQA,SAASE,GAAc/T,EAAMqT,EAAU7pB,EAAQqqB,EAAgB,CAC7D,MAAI,CAACA,GAAkB,CAACA,EAAe5N,YAAc,CAACzc,EAC7C6pB,EAEFa,GAAgBlU,EAAMqT,EAAU7pB,EAAQqqB,CAAAA,CACjD,CASA,SAASK,GAAgBlU,EAAMqT,EAAU7pB,EAAQqqB,EAAgB,CAC/D,IAAMM,EAAenU,EAAKoU,OAAO7X,WAAU,EACrC8X,EAAYC,GAAUtU,EAAK7V,OAAO,EAClC,CAACoqB,cAAeC,EAAcrqB,QAAS,CAACF,SAAAA,CAAQ,CAAC,EAAI+V,EACrDpW,EAAQJ,EAAOG,OACfwjB,EAAS,CAAA,EACXsH,EAAYJ,EACZrrB,EAAQqqB,EAAS,CAAA,EAAGrqB,MACpB8N,EAAI9N,EAER,SAAS0rB,EAASpoB,EAAGmhB,EAAGkH,EAAGC,EAAI,CAC7B,IAAMC,EAAM5qB,EAAW,GAAK,EAC5B,GAAIqC,IAAMmhB,EAKV,KADAnhB,GAAK1C,EACEJ,EAAO8C,EAAI1C,CAAM,EAACmf,MACvBzc,GAAKuoB,EAEP,KAAOrrB,EAAOikB,EAAI7jB,CAAM,EAACmf,MACvB0E,GAAKoH,EAEHvoB,EAAI1C,IAAU6jB,EAAI7jB,IACpBujB,EAAOjS,KAAK,CAAClS,MAAOsD,EAAI1C,EAAOX,IAAKwkB,EAAI7jB,EAAOyG,KAAMskB,EAAGvc,MAAOwc,CAAE,CAAA,EACjEH,EAAYG,EACZ5rB,EAAQykB,EAAI7jB,GAEhB,CAEA,QAAW6oB,KAAWY,EAAU,CAC9BrqB,EAAQiB,EAAWjB,EAAQypB,EAAQzpB,MACnC,IAAI0iB,EAAOliB,EAAOR,EAAQY,CAAM,EAC5BwO,EACJ,IAAKtB,EAAI9N,EAAQ,EAAG8N,GAAK2b,EAAQxpB,IAAK6N,IAAK,CACzC,IAAMoU,EAAK1hB,EAAOsN,EAAIlN,CAAM,EAC5BwO,EAAQkc,GAAUT,EAAe5N,WAAWrC,GAAcuQ,EAAc,CACtE/kB,KAAM,UACN0lB,GAAIpJ,EACJ4E,GAAIpF,EACJ6J,aAAcje,EAAI,GAAKlN,EACvBorB,YAAale,EAAIlN,EACjB4qB,aAAAA,CACF,CAAA,CAAA,CAAA,EACIS,GAAa7c,EAAOqc,CAAY,GAClCC,EAAS1rB,EAAO8N,EAAI,EAAG2b,EAAQpiB,KAAMokB,CAAAA,EAEvC/I,EAAOR,EACPuJ,EAAYrc,CACd,CACIpP,EAAQ8N,EAAI,GACd4d,EAAS1rB,EAAO8N,EAAI,EAAG2b,EAAQpiB,KAAMokB,CAAAA,CAEzC,CAEA,OAAOtH,CACT,CAEA,SAASmH,GAAUnqB,EAAS,CAC1B,MAAO,CACLqN,gBAAiBrN,EAAQqN,gBACzB0d,eAAgB/qB,EAAQ+qB,eACxBC,WAAYhrB,EAAQgrB,WACpBC,iBAAkBjrB,EAAQirB,iBAC1BC,gBAAiBlrB,EAAQkrB,gBACzB7W,YAAarU,EAAQqU,YACrB/G,YAAatN,EAAQsN,WACvB,CACF,CAEA,SAASwd,GAAa7c,EAAOqc,EAAW,CACtC,GAAI,CAACA,EACH,MAAO,GAET,IAAMpZ,EAAQ,CAAA,EACRia,EAAW,SAAS3e,EAAKxH,EAAO,CACpC,OAAKD,GAAoBC,CAAQ,GAG5BkM,EAAMtH,SAAS5E,CAAQ,GAC1BkM,EAAMH,KAAK/L,CAAAA,EAENkM,EAAMiR,QAAQnd,CAAAA,GALZA,CAMX,EACA,OAAO4C,KAAKC,UAAUoG,EAAOkd,CAAAA,IAAcvjB,KAAKC,UAAUyiB,EAAWa,CAAAA,CACvE,CCzWA,SAASC,GAAehc,EAAcic,EAAsBC,EAAwB,CAClF,OAAOlc,EAAMpP,QAAQmK,KAAOiF,EAAMkc,CAAM,EAAGD,EAAUC,CAAM,CAC7D,CAEA,SAASC,GAAensB,EAAiBisB,EAA4B,CACnE,GAAM,CAAChqB,OAAAA,EAAQC,OAAAA,CAAAA,EAAUlC,EACzB,OAAIiC,GAAUC,EACL,CACLtC,KAAMosB,GAAe/pB,EAAQgqB,EAAW,MAAA,EACxCpsB,MAAOmsB,GAAe/pB,EAAQgqB,EAAW,OAAA,EACzChkB,IAAK+jB,GAAe9pB,EAAQ+pB,EAAW,KAAA,EACvC/jB,OAAQ8jB,GAAe9pB,EAAQ+pB,EAAW,QAAA,CAC5C,EAEKA,CACT,CAEO,SAASG,GAAmB5iB,EAAcxJ,EAA+B,CAC9E,IAAM+K,EAAO/K,EAAKqsB,MAClB,GAAIthB,EAAKuhB,SACP,MAAO,GAET,IAAMlX,EAAO+W,GAAensB,EAAMwJ,EAAMyiB,SAAS,EAEjD,MAAO,CACLrsB,KAAMmL,EAAKnL,OAAS,GAAQ,EAAIwV,EAAKxV,MAAQmL,EAAKnL,OAAS,GAAO,EAAImL,EAAKnL,MAC3EC,MAAOkL,EAAKlL,QAAU,GAAQ2J,EAAMoC,MAAQwJ,EAAKvV,OAASkL,EAAKlL,QAAU,GAAO,EAAIkL,EAAKlL,OACzFoI,IAAK8C,EAAK9C,MAAQ,GAAQ,EAAImN,EAAKnN,KAAO8C,EAAK9C,MAAQ,GAAO,EAAI8C,EAAK9C,KACvEC,OAAQ6C,EAAK7C,SAAW,GAAQsB,EAAM2J,OAASiC,EAAKlN,QAAU6C,EAAK7C,SAAW,GAAO,EAAI6C,EAAK7C,OAChG,CACF,CCrBO,IAAMqkB,GAAN,KAAMA,CACXC,aAAc,CACZ,KAAKC,SAAW,KAChB,KAAKC,QAAU,IAAIC,IACnB,KAAKC,SAAW,GAChB,KAAKC,UAAYC,MACnB,CAKAC,QAAQC,EAAOC,EAAOC,EAAMC,EAAM,CAChC,IAAMC,EAAYH,EAAMI,UAAUF,CAAK,EACjCG,EAAWL,EAAMM,SAEvBH,EAAUI,QAAQC,GAAMA,EAAG,CACzBT,MAAAA,EACAU,QAAST,EAAMS,QACfJ,SAAAA,EACAK,YAAaC,KAAKC,IAAIX,EAAOD,EAAMa,MAAOR,CAAAA,CAC5C,CAAA,CAAA,CACF,CAKAS,UAAW,CACL,KAAKtB,WAGT,KAAKG,SAAW,GAEhB,KAAKH,SAAWuB,GAAiBC,KAAKC,OAAQ,IAAM,CAClD,KAAKC,QAAO,EACZ,KAAK1B,SAAW,KAEZ,KAAKG,UACP,KAAKmB,SAAQ,CAEjB,CAAA,EACF,CAKAI,QAAQjB,EAAOkB,KAAKC,IAAG,EAAI,CACzB,IAAIC,EAAY,EAEhB,KAAK5B,QAAQc,QAAQ,CAACP,EAAOD,IAAU,CACrC,GAAI,CAACC,EAAMsB,SAAW,CAACtB,EAAMuB,MAAMC,OACjC,OAEF,IAAMD,EAAQvB,EAAMuB,MAChBE,EAAIF,EAAMC,OAAS,EACnBE,EAAO,GACPC,EAEJ,KAAOF,GAAK,EAAG,EAAEA,EACfE,EAAOJ,EAAME,CAAE,EAEXE,EAAKC,SACHD,EAAKE,OAAS7B,EAAMM,WAGtBN,EAAMM,SAAWqB,EAAKE,QAExBF,EAAKG,KAAK7B,CAAAA,EACVyB,EAAO,KAIPH,EAAME,CAAAA,EAAKF,EAAMA,EAAMC,OAAS,CAAE,EAClCD,EAAMQ,IAAG,GAITL,IACF3B,EAAM2B,KAAI,EACV,KAAK5B,QAAQC,EAAOC,EAAOC,EAAM,UAAA,GAG9BsB,EAAMC,SACTxB,EAAMsB,QAAU,GAChB,KAAKxB,QAAQC,EAAOC,EAAOC,EAAM,UAAA,EACjCD,EAAMS,QAAU,IAGlBY,GAAaE,EAAMC,MACrB,CAAA,EAEA,KAAK5B,UAAYK,EAEboB,IAAc,IAChB,KAAK1B,SAAW,GAEpB,CAKAqC,UAAUjC,EAAO,CACf,IAAMkC,EAAS,KAAKxC,QAChBO,EAAQiC,EAAOC,IAAInC,CAAAA,EACvB,OAAKC,IACHA,EAAQ,CACNsB,QAAS,GACTb,QAAS,GACTc,MAAO,CAAA,EACPnB,UAAW,CACT+B,SAAU,CAAA,EACVC,SAAU,CAAA,CACZ,CACF,EACAH,EAAOI,IAAItC,EAAOC,CAAAA,GAEbA,CACT,CAOAsC,OAAOvC,EAAOwC,EAAOC,EAAI,CACvB,KAAKR,UAAUjC,CAAAA,EAAOK,UAAUmC,CAAAA,EAAOE,KAAKD,CAAAA,CAC9C,CAOAE,IAAI3C,EAAOwB,EAAO,CACZ,CAACA,GAAS,CAACA,EAAMC,QAGrB,KAAKQ,UAAUjC,CAAAA,EAAOwB,MAAMkB,KAAQlB,GAAAA,CAAAA,CACtC,CAMAoB,IAAI5C,EAAO,CACT,OAAO,KAAKiC,UAAUjC,CAAAA,EAAOwB,MAAMC,OAAS,CAC9C,CAMAX,MAAMd,EAAO,CACX,IAAMC,EAAQ,KAAKP,QAAQyC,IAAInC,CAAAA,EAC1BC,IAGLA,EAAMsB,QAAU,GAChBtB,EAAMa,MAAQM,KAAKC,IAAG,EACtBpB,EAAMM,SAAWN,EAAMuB,MAAMqB,OAAO,CAACC,EAAKC,IAAQnC,KAAKoC,IAAIF,EAAKC,EAAIE,SAAS,EAAG,CAAA,EAChF,KAAKlC,SAAQ,EACf,CAEAQ,QAAQvB,EAAO,CACb,GAAI,CAAC,KAAKJ,SACR,MAAO,GAET,IAAMK,EAAQ,KAAKP,QAAQyC,IAAInC,CAAAA,EAC/B,MAAI,GAACC,GAAS,CAACA,EAAMsB,SAAW,CAACtB,EAAMuB,MAAMC,OAI/C,CAMAyB,KAAKlD,EAAO,CACV,IAAMC,EAAQ,KAAKP,QAAQyC,IAAInC,CAAAA,EAC/B,GAAI,CAACC,GAAS,CAACA,EAAMuB,MAAMC,OACzB,OAEF,IAAMD,EAAQvB,EAAMuB,MAChBE,EAAIF,EAAMC,OAAS,EAEvB,KAAOC,GAAK,EAAG,EAAEA,EACfF,EAAME,CAAE,EAACyB,OAAM,EAEjBlD,EAAMuB,MAAQ,CAAA,EACd,KAAKzB,QAAQC,EAAOC,EAAOmB,KAAKC,IAAG,EAAI,UAAA,CACzC,CAMA+B,OAAOpD,EAAO,CACZ,OAAO,KAAKN,QAAQ2D,OAAOrD,CAAAA,CAC7B,CACF,EAGAsD,GAA+B,IAAI/D,GCjN7BgE,GAAc,cACdC,GAAgB,CACpBC,QAAQC,EAAMC,EAAIC,EAAQ,CACxB,OAAOA,EAAS,GAAMD,EAAKD,CAC7B,EAMAG,MAAMH,EAAMC,EAAIC,EAAQ,CACtB,IAAME,EAAKC,GAAaL,GAAQH,EAAAA,EAC1BS,EAAKF,EAAGG,OAASF,GAAaJ,GAAMJ,EAAAA,EAC1C,OAAOS,GAAMA,EAAGC,MACZD,EAAGE,IAAIJ,EAAIF,CAAAA,EAAQO,UAAS,EAC5BR,CACN,EACAS,OAAOV,EAAMC,EAAIC,EAAQ,CACvB,OAAOF,GAAQC,EAAKD,GAAQE,CAC9B,CACF,EAEqBS,GAAN,KAAMA,CACnB7E,YAAY8E,EAAKC,EAAQC,EAAMb,EAAI,CACjC,IAAMc,EAAeF,EAAOC,CAAK,EAEjCb,EAAKe,GAAQ,CAACJ,EAAIX,GAAIA,EAAIc,EAAcH,EAAIZ,IAAK,CAAA,EACjD,IAAMA,EAAOgB,GAAQ,CAACJ,EAAIZ,KAAMe,EAAcd,CAAG,CAAA,EAEjD,KAAK9B,QAAU,GACf,KAAK8C,IAAML,EAAI7D,IAAM+C,GAAcc,EAAInE,MAAQ,OAAOuD,CAAK,EAC3D,KAAKkB,QAAUC,GAAQP,EAAIQ,MAAM,GAAKD,GAAQE,OAC9C,KAAKC,OAASpE,KAAKqE,MAAM7D,KAAKC,IAAG,GAAMiD,EAAIY,OAAS,EAAA,EACpD,KAAKjC,UAAY,KAAKnB,OAASlB,KAAKqE,MAAMX,EAAI/D,QAAQ,EACtD,KAAK4E,MAAQ,CAAC,CAACb,EAAIc,KACnB,KAAKC,QAAUd,EACf,KAAKe,MAAQd,EACb,KAAKe,MAAQ7B,EACb,KAAK8B,IAAM7B,EACX,KAAK8B,UAAY3F,MACnB,CAEA4F,QAAS,CACP,OAAO,KAAK7D,OACd,CAEA8D,OAAOrB,EAAKX,EAAIzD,EAAM,CACpB,GAAI,KAAK2B,QAAS,CAChB,KAAK9B,QAAQ,EAAK,EAElB,IAAM0E,EAAe,KAAKY,QAAQ,KAAKC,KAAK,EACtCM,EAAU1F,EAAO,KAAK8E,OACtBa,EAAS,KAAK5C,UAAY2C,EAChC,KAAKZ,OAAS9E,EACd,KAAK+C,UAAYrC,KAAKqE,MAAMrE,KAAKoC,IAAI6C,EAAQvB,EAAI/D,QAAQ,CAAA,EACzD,KAAKuB,QAAU8D,EACf,KAAKT,MAAQ,CAAC,CAACb,EAAIc,KACnB,KAAKI,IAAMd,GAAQ,CAACJ,EAAIX,GAAIA,EAAIc,EAAcH,EAAIZ,IAAK,CAAA,EACvD,KAAK6B,MAAQb,GAAQ,CAACJ,EAAIZ,KAAMe,EAAcd,CAAG,CAAA,EAErD,CAEAR,QAAS,CACH,KAAKtB,UAEP,KAAKE,KAAKX,KAAKC,IAAG,CAAA,EAClB,KAAKQ,QAAU,GACf,KAAK9B,QAAQ,EAAK,EAEtB,CAEAgC,KAAK7B,EAAM,CACT,IAAM0F,EAAU1F,EAAO,KAAK8E,OACtBzE,EAAW,KAAK0C,UAChBuB,EAAO,KAAKc,MACZ5B,EAAO,KAAK6B,MACZH,EAAO,KAAKD,MACZxB,EAAK,KAAK6B,IACZ5B,EAIJ,GAFA,KAAK/B,QAAU6B,IAASC,IAAOyB,GAASQ,EAAUrF,GAE9C,CAAC,KAAKsB,QAAS,CACjB,KAAKwD,QAAQb,CAAAA,EAAQb,EACrB,KAAK5D,QAAQ,EAAI,EACjB,OAGF,GAAI6F,EAAU,EAAG,CACf,KAAKP,QAAQb,CAAAA,EAAQd,EACrB,OAGFE,EAAUgC,EAAUrF,EAAY,EAChCqD,EAASwB,GAAQxB,EAAS,EAAI,EAAIA,EAASA,EAC3CA,EAAS,KAAKgB,QAAQhE,KAAKC,IAAI,EAAGD,KAAKoC,IAAI,EAAGY,CAAAA,CAAAA,CAAAA,EAE9C,KAAKyB,QAAQb,CAAK,EAAG,KAAKG,IAAIjB,EAAMC,EAAIC,CAAAA,CAC1C,CAEAkC,MAAO,CACL,IAAMC,EAAW,KAAKN,YAAc,KAAKA,UAAY,CAAA,GACrD,OAAO,IAAIO,QAAQ,CAACC,EAAKC,IAAQ,CAC/BH,EAASrD,KAAK,CAACuD,IAAAA,EAAKC,IAAAA,CAAG,CAAA,CACzB,CAAA,CACF,CAEAnG,QAAQoG,EAAU,CAChB,IAAMC,EAASD,EAAW,MAAQ,MAC5BJ,EAAW,KAAKN,WAAa,CAAA,EACnC,QAAS/D,EAAI,EAAGA,EAAIqE,EAAStE,OAAQC,IACnCqE,EAASrE,CAAE,EAAC0E,CAAO,EAAA,CAEvB,CACF,ECjHqBC,GAAN,KAAMA,CACnB7G,YAAYQ,EAAOsG,EAAQ,CACzB,KAAKC,OAASvG,EACd,KAAKwG,YAAc,IAAI7G,IACvB,KAAK8G,UAAUH,CAAAA,CACjB,CAEAG,UAAUH,EAAQ,CAChB,GAAI,CAACI,GAASJ,CAAS,EACrB,OAGF,IAAMK,EAAmBC,OAAOC,KAAKC,GAASC,SAAS,EACjDC,EAAgB,KAAKR,YAE3BI,OAAOK,oBAAoBX,CAAAA,EAAQ9F,QAAQ0G,GAAO,CAChD,IAAM5C,EAAMgC,EAAOY,CAAI,EACvB,GAAI,CAACR,GAASpC,CAAM,EAClB,OAEF,IAAM6B,EAAW,CAAA,EACjB,QAAWgB,KAAUR,EACnBR,EAASgB,CAAAA,EAAU7C,EAAI6C,CAAO,GAG/BC,GAAQ9C,EAAI+C,UAAU,GAAK/C,EAAI+C,YAAc,CAACH,CAAI,GAAE1G,QAASgE,GAAS,EACjEA,IAAS0C,GAAO,CAACF,EAAcpE,IAAI4B,CAAO,IAC5CwC,EAAc1E,IAAIkC,EAAM2B,CAAAA,CAE5B,CAAA,CACF,CAAA,CACF,CAMAmB,gBAAgB/C,EAAQgD,EAAQ,CAC9B,IAAMC,EAAaD,EAAOE,QACpBA,EAAUC,GAAqBnD,EAAQiD,CAAAA,EAC7C,GAAI,CAACC,EACH,MAAO,CAAA,EAGT,IAAME,EAAa,KAAKC,kBAAkBH,EAASD,CAAAA,EACnD,OAAIA,EAAWK,SAIbC,GAASvD,EAAOkD,QAAQM,YAAaP,CAAYQ,EAAAA,KAAK,IAAM,CAC1DzD,EAAOkD,QAAUD,CACnB,EAAG,IAAM,CAET,CAAA,EAGKG,CACT,CAKAC,kBAAkBrD,EAAQgD,EAAQ,CAChC,IAAMP,EAAgB,KAAKR,YACrBmB,EAAa,CAAA,EACbpG,EAAUgD,EAAOwD,cAAgBxD,EAAOwD,YAAc,CAAA,GACtDE,EAAQrB,OAAOC,KAAKU,CAAAA,EACpBrH,EAAOkB,KAAKC,IAAG,EACjBK,EAEJ,IAAKA,EAAIuG,EAAMxG,OAAS,EAAGC,GAAK,EAAG,EAAEA,EAAG,CACtC,IAAM8C,EAAOyD,EAAMvG,CAAE,EACrB,GAAI8C,EAAK0D,OAAO,CAAA,IAAO,IACrB,SAGF,GAAI1D,IAAS,UAAW,CACtBmD,EAAWjF,KAAQ,GAAA,KAAK4E,gBAAgB/C,EAAQgD,CAAAA,CAAAA,EAChD,SAEF,IAAMY,EAAQZ,EAAO/C,CAAK,EACtBuC,EAAYxF,EAAQiD,CAAK,EACvBF,EAAM0C,EAAc7E,IAAIqC,CAAAA,EAE9B,GAAIuC,EACF,GAAIzC,GAAOyC,EAAUrB,OAAM,EAAI,CAE7BqB,EAAUpB,OAAOrB,EAAK6D,EAAOjI,CAAAA,EAC7B,cAEA6G,EAAU5D,OAAM,EAGpB,GAAI,CAACmB,GAAO,CAACA,EAAI/D,SAAU,CAEzBgE,EAAOC,CAAAA,EAAQ2D,EACf,SAGF5G,EAAQiD,CAAAA,EAAQuC,EAAY,IAAI1C,GAAUC,EAAKC,EAAQC,EAAM2D,CAAAA,EAC7DR,EAAWjF,KAAKqE,CAAAA,CAClB,CACA,OAAOY,CACT,CASAhC,OAAOpB,EAAQgD,EAAQ,CACrB,GAAI,KAAKf,YAAY4B,OAAS,EAAG,CAE/BxB,OAAOyB,OAAO9D,EAAQgD,CAAAA,EACtB,OAGF,IAAMI,EAAa,KAAKC,kBAAkBrD,EAAQgD,CAAAA,EAElD,GAAII,EAAWlG,OACb6B,OAAAA,GAASX,IAAI,KAAK4D,OAAQoB,CAAAA,EACnB,EAEX,CACF,EAEA,SAASG,GAASH,EAAYN,EAAY,CACxC,IAAM9F,EAAU,CAAA,EACVsF,EAAOD,OAAOC,KAAKQ,CAAAA,EACzB,QAAS3F,EAAI,EAAGA,EAAImF,EAAKpF,OAAQC,IAAK,CACpC,IAAM4G,EAAOX,EAAWd,EAAKnF,CAAAA,CAAE,EAC3B4G,GAAQA,EAAK5C,OAAM,GACrBnE,EAAQmB,KAAK4F,EAAKxC,KAAI,CAAA,CAE1B,CAEA,OAAOE,QAAQuC,IAAIhH,CAAAA,CACrB,CAEA,SAASmG,GAAqBnD,EAAQiD,EAAY,CAChD,GAAI,CAACA,EACH,OAEF,IAAIC,EAAUlD,EAAOkD,QACrB,GAAI,CAACA,EAAS,CACZlD,EAAOkD,QAAUD,EACjB,OAEF,OAAIC,EAAQI,UAGVtD,EAAOkD,QAAUA,EAAUb,OAAOyB,OAAO,CAAA,EAAIZ,EAAS,CAACI,QAAS,GAAOE,YAAa,CAAA,CAAE,CAAA,GAEjFN,CACT,CCtJA,SAASe,GAAUC,EAAOC,EAAiB,CACzC,IAAMC,EAAOF,GAASA,EAAMhB,SAAW,CAAA,EACjCmB,EAAUD,EAAKC,QACf/H,EAAM8H,EAAK9H,MAAQf,OAAY4I,EAAkB,EACjD1F,EAAM2F,EAAK3F,MAAQlD,OAAY4I,EAAkB,EACvD,MAAO,CACL5H,MAAO8H,EAAU5F,EAAMnC,EACvBgI,IAAKD,EAAU/H,EAAMmC,CACvB,CACF,CAEA,SAAS8F,GAAYC,EAAQC,EAAQN,EAAiB,CACpD,GAAIA,IAAoB,GACtB,MAAO,GAET,IAAMO,EAAIT,GAAUO,EAAQL,CAAAA,EACtBQ,EAAIV,GAAUQ,EAAQN,CAAAA,EAE5B,MAAO,CACLS,IAAKD,EAAEL,IACPO,MAAOH,EAAEJ,IACTQ,OAAQH,EAAEpI,MACVwI,KAAML,EAAEnI,KACV,CACF,CAEA,SAASyI,GAAOpB,EAAO,CACrB,IAAIqB,EAAGC,EAAGC,EAAGC,EAEb,OAAIjD,GAASyB,CAAQ,GACnBqB,EAAIrB,EAAMgB,IACVM,EAAItB,EAAMiB,MACVM,EAAIvB,EAAMkB,OACVM,EAAIxB,EAAMmB,MAEVE,EAAIC,EAAIC,EAAIC,EAAIxB,EAGX,CACLgB,IAAKK,EACLJ,MAAOK,EACPJ,OAAQK,EACRJ,KAAMK,EACNC,SAAUzB,IAAU,EACtB,CACF,CAEA,SAAS0B,GAAwB7J,EAAO8J,EAAe,CACrD,IAAMjD,EAAO,CAAA,EACPkD,EAAW/J,EAAMgK,uBAAuBF,CAAAA,EAC1CpI,EAAGuI,EAEP,IAAKvI,EAAI,EAAGuI,EAAOF,EAAStI,OAAQC,EAAIuI,EAAM,EAAEvI,EAC9CmF,EAAKnE,KAAKqH,EAASrI,CAAAA,EAAGwI,KAAK,EAE7B,OAAOrD,CACT,CAEA,SAASsD,GAAWC,EAAOjC,EAAOkC,EAAS5C,EAAU,CAAA,EAAI,CACvD,IAAMZ,EAAOuD,EAAMvD,KACbyD,EAAa7C,EAAQ8C,OAAS,SAChC7I,EAAGuI,EAAMO,EAAcC,EAE3B,GAAItC,IAAU,KACZ,OAGF,IAAIuC,EAAQ,GACZ,IAAKhJ,EAAI,EAAGuI,EAAOpD,EAAKpF,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CAE7C,GADA8I,EAAe,CAAC3D,EAAKnF,CAAE,EACnB8I,IAAiBH,EAAS,CAE5B,GADAK,EAAQ,GACJjD,EAAQc,IACV,SAEF,MAEFkC,EAAaL,EAAM7C,OAAOiD,CAAa,EACnCG,GAASF,CAAgBH,IAAAA,GAAenC,IAAU,GAAKyC,GAAKzC,CAAAA,IAAWyC,GAAKH,CAAAA,KAC9EtC,GAASsC,EAEb,CAEA,MAAI,CAACC,GAAS,CAACjD,EAAQc,IACd,EAGFJ,CACT,CAEA,SAAS0C,GAAyBC,EAAMC,EAAM,CAC5C,GAAM,CAACC,OAAAA,EAAQC,OAAAA,CAAAA,EAAUF,EACnBG,EAAWF,EAAOG,OAAS,IAAM,IAAM,IACvCC,EAAWH,EAAOE,OAAS,IAAM,IAAM,IACvCtE,EAAOD,OAAOC,KAAKiE,CAAAA,EACnBO,EAAQ,IAAIC,MAAMzE,EAAKpF,MAAM,EAC/BC,EAAGuI,EAAM/C,EACb,IAAKxF,EAAI,EAAGuI,EAAOpD,EAAKpF,OAAQC,EAAIuI,EAAM,EAAEvI,EAC1CwF,EAAML,EAAKnF,CAAE,EACb2J,EAAM3J,CAAAA,EAAK,CACT,CAACwJ,CAAAA,EAAWhE,EACZ,CAACkE,CAAS,EAAEN,EAAK5D,CAAI,CACvB,EAEF,OAAOmE,CACT,CAEA,SAASE,GAAU9C,EAAOsC,EAAM,CAC9B,IAAMS,EAAU/C,GAASA,EAAMhB,QAAQ+D,QACvC,OAAOA,GAAYA,IAAY1L,QAAaiL,EAAKX,QAAUtK,MAC7D,CAEA,SAAS2L,GAAYC,EAAYC,EAAYZ,EAAM,CACjD,MAAO,GAAGW,EAAWE,EAAE,IAAID,EAAWC,EAAE,IAAIb,EAAKX,OAASW,EAAK5K,IAAI,EACrE,CAEA,SAAS0L,GAAcpD,EAAO,CAC5B,GAAM,CAAC5H,IAAAA,EAAKmC,IAAAA,EAAK8I,WAAAA,EAAYC,WAAAA,CAAU,EAAItD,EAAMoD,cAAa,EAC9D,MAAO,CACLhL,IAAKiL,EAAajL,EAAMmL,OAAOC,kBAC/BjJ,IAAK+I,EAAa/I,EAAMgJ,OAAOE,iBACjC,CACF,CAEA,SAASC,GAAiBC,EAAQC,EAAUC,EAAY,CACtD,IAAMC,EAAWH,EAAOC,CAAS,IAAKD,EAAOC,CAAAA,EAAY,CAAA,GACzD,OAAOE,EAASD,CAAAA,IAAgBC,EAASD,CAAAA,EAAc,CAAA,EACzD,CAEA,SAASE,GAAoBpC,EAAOa,EAAQwB,EAAUtM,EAAM,CAC1D,QAAW4K,KAAQE,EAAOyB,wBAAwBvM,CAAAA,EAAMyI,QAAO,EAAI,CACjE,IAAMT,EAAQiC,EAAMW,EAAKb,KAAK,EAC9B,GAAIuC,GAAatE,EAAQ,GAAO,CAACsE,GAAYtE,EAAQ,EACnD,OAAO4C,EAAKb,KAEhB,CAEA,OAAO,IACT,CAEA,SAASyC,GAAaC,EAAYC,EAAQ,CACxC,GAAM,CAAC7M,MAAAA,EAAO8M,YAAa/B,CAAAA,EAAQ6B,EAC7BR,EAASpM,EAAM+M,UAAY/M,EAAM+M,QAAU,CAAA,GAC3C,CAAC/B,OAAAA,EAAQC,OAAAA,EAAQf,MAAOM,CAAAA,EAAgBO,EACxCiC,EAAQhC,EAAOG,KACf8B,EAAQhC,EAAOE,KACfjE,EAAMuE,GAAYT,EAAQC,EAAQF,CAAAA,EAClCd,EAAO4C,EAAOpL,OAChB2I,EAEJ,QAAS1I,EAAI,EAAGA,EAAIuI,EAAM,EAAEvI,EAAG,CAC7B,IAAME,EAAOiL,EAAOnL,CAAE,EAChB,CAAC,CAACsL,CAAAA,EAAQ9C,EAAO,CAAC+C,CAAM,EAAE9E,CAAK,EAAIvG,EACnCsL,EAAatL,EAAKmL,UAAYnL,EAAKmL,QAAU,CAAA,GACnD3C,EAAQ8C,EAAWD,CAAAA,EAASd,GAAiBC,EAAQlF,EAAKgD,CAAAA,EAC1DE,EAAMI,CAAAA,EAAgBrC,EAEtBiC,EAAM+C,KAAOX,GAAoBpC,EAAOa,EAAQ,GAAMF,EAAK5K,IAAI,EAC/DiK,EAAMgD,QAAUZ,GAAoBpC,EAAOa,EAAQ,GAAOF,EAAK5K,IAAI,EAEnE,IAAMkN,EAAejD,EAAMkD,gBAAkBlD,EAAMkD,cAAgB,CAAA,GACnED,EAAa7C,CAAAA,EAAgBrC,CAC/B,CACF,CAEA,SAASoF,GAAgBvN,EAAOmL,EAAM,CACpC,IAAMqC,EAASxN,EAAMwN,OACrB,OAAO5G,OAAOC,KAAK2G,CAAAA,EAAQC,OAAOvG,GAAOsG,EAAOtG,CAAI,EAACiE,OAASA,CAAAA,EAAMuC,MAAK,CAC3E,CAEA,SAASC,GAAqBC,EAAQ1D,EAAO,CAC3C,OAAO2D,GAAcD,EACnB,CACElI,OAAQ,GACRoI,QAAShO,OACT0K,aAAcN,EACdA,MAAAA,EACAK,KAAM,UACNpK,KAAM,SACR,CAAA,CAEJ,CAEA,SAAS4N,GAAkBH,EAAQ1D,EAAO8D,EAAS,CACjD,OAAOH,GAAcD,EAAQ,CAC3BlI,OAAQ,GACRuI,UAAW/D,EACX2C,OAAQ/M,OACRoO,IAAKpO,OACLkO,QAAAA,EACA9D,MAAAA,EACAK,KAAM,UACNpK,KAAM,MACR,CAAA,CACF,CAEA,SAASgO,GAAYpD,EAAMvJ,EAAO,CAEhC,IAAMgJ,EAAeO,EAAK6B,WAAW1C,MAC/BiB,EAAOJ,EAAKE,QAAUF,EAAKE,OAAOE,KACxC,GAAKA,EAIL3J,CAAAA,EAAQA,GAASuJ,EAAKqD,QACtB,QAAWvB,KAAUrL,EAAO,CAC1B,IAAM4K,EAASS,EAAOE,QACtB,GAAI,CAACX,GAAUA,EAAOjB,CAAK,IAAKrL,QAAasM,EAAOjB,CAAAA,EAAMX,CAAAA,IAAkB1K,OAC1E,OAEF,OAAOsM,EAAOjB,CAAK,EAACX,CAAa,EAC7B4B,EAAOjB,CAAK,EAACmC,gBAAkBxN,QAAasM,EAAOjB,CAAAA,EAAMmC,cAAc9C,CAAAA,IAAkB1K,QAC3F,OAAOsM,EAAOjB,CAAAA,EAAMmC,cAAc9C,CAAa,CAEnD,EACF,CAEA,IAAM6D,GAAsB9D,GAASA,IAAS,SAAWA,IAAS,OAC5D+D,GAAmB,CAACC,EAAQC,IAAWA,EAASD,EAAS3H,OAAOyB,OAAO,CAAA,EAAIkG,CAAO,EAClFE,GAAc,CAACC,EAAU3D,EAAM/K,IAAU0O,GAAY,CAAC3D,EAAK4D,QAAU5D,EAAK6D,UAC3E,CAAC/H,KAAMgD,GAAwB7J,EAAO,EAAI,EAAGuH,OAAQ,IAAI,EAEzCsH,GAAN,KAAMA,CAKnB,OAAO/H,SAAW,CAAA,EAKlB,OAAOgI,mBAAqB,KAK5B,OAAOC,gBAAkB,KAMzBvP,YAAYQ,EAAOwK,EAAc,CAC/B,KAAKxK,MAAQA,EACb,KAAKgP,KAAOhP,EAAMiP,IAClB,KAAK/E,MAAQM,EACb,KAAK0E,gBAAkB,CAAA,EACvB,KAAKpC,YAAc,KAAKqC,QAAO,EAC/B,KAAKC,MAAQ,KAAKtC,YAAY3M,KAC9B,KAAKsH,QAAU3H,OAEf,KAAKuP,SAAW,GAChB,KAAKC,MAAQxP,OACb,KAAKyP,YAAczP,OACnB,KAAK0P,eAAiB1P,OACtB,KAAK2P,WAAa3P,OAClB,KAAK4P,WAAa5P,OAClB,KAAK6P,oBAAsB,GAC3B,KAAKC,mBAAqB,GAC1B,KAAKC,SAAW/P,OAChB,KAAKgQ,UAAY,CAAA,EACjB,KAAKhB,mBAAqB,WAAWA,mBACrC,KAAKC,gBAAkB,WAAWA,gBAElC,KAAKgB,WAAU,CACjB,CAEAA,YAAa,CACX,IAAMhF,EAAO,KAAK+B,YAClB,KAAKrG,UAAS,EACd,KAAKuJ,WAAU,EACfjF,EAAK6D,SAAWrD,GAAUR,EAAKE,OAAQF,CAAAA,EACvC,KAAKkF,YAAW,EAEZ,KAAKxI,QAAQyI,MAAQ,CAAC,KAAKlQ,MAAMmQ,gBAAgB,QAAW,GAC9DC,QAAQC,KAAK,oKAAA,CAEjB,CAEAC,YAAY9F,EAAc,CACpB,KAAKN,QAAUM,GACjB2D,GAAY,KAAKrB,WAAW,EAE9B,KAAK5C,MAAQM,CACf,CAEAwF,YAAa,CACX,IAAMhQ,EAAQ,KAAKA,MACb+K,EAAO,KAAK+B,YACZgB,EAAU,KAAKyC,WAAU,EAEzBC,EAAW,CAACrF,EAAMlC,EAAGC,EAAGO,IAAM0B,IAAS,IAAMlC,EAAIkC,IAAS,IAAM1B,EAAIP,EAEpEuH,EAAM1F,EAAK2F,QAAUC,GAAe7C,EAAQ4C,QAASnD,GAAgBvN,EAAO,GAAA,CAAA,EAC5E4Q,EAAM7F,EAAK8F,QAAUF,GAAe7C,EAAQ+C,QAAStD,GAAgBvN,EAAO,GAAA,CAAA,EAC5E8Q,EAAM/F,EAAKgG,QAAUJ,GAAe7C,EAAQiD,QAASxD,GAAgBvN,EAAO,GAAA,CAAA,EAC5EgR,EAAYjG,EAAKiG,UACjBC,EAAMlG,EAAKmG,QAAUV,EAASQ,EAAWP,EAAKG,EAAKE,CAAAA,EACnDK,EAAMpG,EAAKqG,QAAUZ,EAASQ,EAAWJ,EAAKH,EAAKK,CAAAA,EACzD/F,EAAKhC,OAAS,KAAKsI,cAAcZ,CAAAA,EACjC1F,EAAK/B,OAAS,KAAKqI,cAAcT,CAAAA,EACjC7F,EAAKuG,OAAS,KAAKD,cAAcP,CAAAA,EACjC/F,EAAKC,OAAS,KAAKqG,cAAcJ,CAAAA,EACjClG,EAAKE,OAAS,KAAKoG,cAAcF,CAAAA,CACnC,CAEAZ,YAAa,CACX,OAAO,KAAKvQ,MAAM8K,KAAKyG,SAAS,KAAKrH,KAAK,CAC5C,CAEAiF,SAAU,CACR,OAAO,KAAKnP,MAAMwR,eAAe,KAAKtH,KAAK,CAC7C,CAMAmH,cAAcI,EAAS,CACrB,OAAO,KAAKzR,MAAMwN,OAAOiE,CAAQ,CACnC,CAKAC,eAAejJ,EAAO,CACpB,IAAMsC,EAAO,KAAK+B,YAClB,OAAOrE,IAAUsC,EAAKC,OAClBD,EAAKE,OACLF,EAAKC,MACX,CAEA2G,OAAQ,CACN,KAAKxQ,QAAQ,OAAA,CACf,CAKAyQ,UAAW,CACT,IAAM7G,EAAO,KAAK+B,YACd,KAAKwC,OACPuC,GAAoB,KAAKvC,MAAO,IAAI,EAElCvE,EAAK6D,UACPT,GAAYpD,CAAAA,CAEhB,CAKA+G,YAAa,CACX,IAAMhE,EAAU,KAAKyC,WAAU,EACzBzF,EAAOgD,EAAQhD,OAASgD,EAAQhD,KAAO,CAAA,GACvCwE,EAAQ,KAAKA,MAMnB,GAAI5I,GAASoE,CAAO,EAAA,CAClB,IAAMC,EAAO,KAAK+B,YAClB,KAAKwC,MAAQzE,GAAyBC,EAAMC,CAAAA,UACnCuE,IAAUxE,EAAM,CACzB,GAAIwE,EAAO,CAETuC,GAAoBvC,EAAO,IAAI,EAE/B,IAAMvE,EAAO,KAAK+B,YAClBqB,GAAYpD,CAAAA,EACZA,EAAKqD,QAAU,CAAA,EAEbtD,GAAQlE,OAAOmL,aAAajH,CAAO,GACrCkH,GAAkBlH,EAAM,IAAI,EAE9B,KAAKgF,UAAY,CAAA,EACjB,KAAKR,MAAQxE,EAEjB,CAEAmF,aAAc,CACZ,IAAMlF,EAAO,KAAK+B,YAElB,KAAKgF,WAAU,EAEX,KAAKhD,qBACP/D,EAAK+C,QAAU,IAAI,KAAKgB,mBAE5B,CAEAmD,sBAAsBC,EAAkB,CACtC,IAAMnH,EAAO,KAAK+B,YACZgB,EAAU,KAAKyC,WAAU,EAC3B4B,EAAe,GAEnB,KAAKL,WAAU,EAGf,IAAMM,EAAarH,EAAK6D,SACxB7D,EAAK6D,SAAWrD,GAAUR,EAAKE,OAAQF,CAAAA,EAGnCA,EAAKX,QAAU0D,EAAQ1D,QACzB+H,EAAe,GAEfhE,GAAYpD,CAAAA,EACZA,EAAKX,MAAQ0D,EAAQ1D,OAKvB,KAAKiI,gBAAgBH,CAAAA,GAGjBC,GAAgBC,IAAerH,EAAK6D,YACtCjC,GAAa,KAAM5B,EAAKqD,OAAO,EAC/BrD,EAAK6D,SAAWrD,GAAUR,EAAKE,OAAQF,CAAAA,EAE3C,CAMAtE,WAAY,CACV,IAAMH,EAAS,KAAKtG,MAAMsG,OACpBgM,EAAYhM,EAAOiM,iBAAiB,KAAKnD,KAAK,EAC9CoD,EAASlM,EAAOmM,gBAAgB,KAAKlC,WAAU,EAAI+B,EAAW,EAAI,EACxE,KAAK7K,QAAUnB,EAAOoM,eAAeF,EAAQ,KAAKG,WAAU,CAAA,EAC5D,KAAKtD,SAAW,KAAK5H,QAAQmL,QAC7B,KAAK1D,gBAAkB,CAAA,CACzB,CAMA2D,MAAM/R,EAAOgS,EAAO,CAClB,GAAM,CAAChG,YAAa/B,EAAMuE,MAAOxE,CAAI,EAAI,KACnC,CAACE,OAAAA,EAAQ4D,SAAAA,CAAAA,EAAY7D,EACrBiC,EAAQhC,EAAOG,KAEjB4H,EAASjS,IAAU,GAAKgS,IAAUhI,EAAKrJ,OAAS,GAAOsJ,EAAKiI,QAC5DC,EAAOnS,EAAQ,GAAKiK,EAAKqD,QAAQtN,EAAQ,CAAE,EAC3CY,EAAGqB,EAAK8J,EAEZ,GAAI,KAAKwC,WAAa,GACpBtE,EAAKqD,QAAUtD,EACfC,EAAKiI,QAAU,GACfnG,EAAS/B,MACJ,CACD1D,GAAQ0D,EAAKhK,CAAAA,CAAM,EACrB+L,EAAS,KAAKqG,eAAenI,EAAMD,EAAMhK,EAAOgS,CAAAA,EACvCpM,GAASoE,EAAKhK,CAAAA,CAAM,EAC7B+L,EAAS,KAAKsG,gBAAgBpI,EAAMD,EAAMhK,EAAOgS,CAAAA,EAEjDjG,EAAS,KAAKuG,mBAAmBrI,EAAMD,EAAMhK,EAAOgS,CAAAA,EAGtD,IAAMO,EAA6B,IAAMtQ,EAAIiK,CAAAA,IAAW,MAASiG,GAAQlQ,EAAIiK,CAAAA,EAASiG,EAAKjG,CAAM,EACjG,IAAKtL,EAAI,EAAGA,EAAIoR,EAAO,EAAEpR,EACvBqJ,EAAKqD,QAAQ1M,EAAIZ,CAAAA,EAASiC,EAAM8J,EAAOnL,CAAE,EACrCqR,IACEM,EAA8B,IAChCN,EAAS,IAEXE,EAAOlQ,GAGXgI,EAAKiI,QAAUD,EAGbnE,GACFjC,GAAa,KAAME,CAAAA,CAEvB,CAaAuG,mBAAmBrI,EAAMD,EAAMhK,EAAOgS,EAAO,CAC3C,GAAM,CAAC9H,OAAAA,EAAQC,OAAAA,CAAAA,EAAUF,EACnBiC,EAAQhC,EAAOG,KACf8B,EAAQhC,EAAOE,KACfmI,EAAStI,EAAOuI,UAAS,EACzBC,EAAcxI,IAAWC,EACzB4B,EAAS,IAAIvB,MAAMwH,CAAAA,EACrBpR,EAAGuI,EAAMC,EAEb,IAAKxI,EAAI,EAAGuI,EAAO6I,EAAOpR,EAAIuI,EAAM,EAAEvI,EACpCwI,EAAQxI,EAAIZ,EACZ+L,EAAOnL,CAAAA,EAAK,CACV,CAACsL,CAAAA,EAAQwG,GAAexI,EAAO6H,MAAMS,EAAOpJ,CAAAA,EAAQA,CAAAA,EACpD,CAAC+C,CAAAA,EAAQhC,EAAO4H,MAAM/H,EAAKZ,CAAAA,EAAQA,CAAAA,CACrC,EAEF,OAAO2C,CACT,CAaAqG,eAAenI,EAAMD,EAAMhK,EAAOgS,EAAO,CACvC,GAAM,CAAC/J,OAAAA,EAAQC,OAAAA,CAAAA,EAAU+B,EACnB8B,EAAS,IAAIvB,MAAMwH,CAAAA,EACrBpR,EAAGuI,EAAMC,EAAOtI,EAEpB,IAAKF,EAAI,EAAGuI,EAAO6I,EAAOpR,EAAIuI,EAAM,EAAEvI,EACpCwI,EAAQxI,EAAIZ,EACZc,EAAOkJ,EAAKZ,CAAM,EAClB2C,EAAOnL,CAAAA,EAAK,CACVuH,EAAGF,EAAO8J,MAAMjR,EAAK,CAAA,EAAIsI,CAAAA,EACzBhB,EAAGF,EAAO6J,MAAMjR,EAAK,CAAA,EAAIsI,CAAAA,CAC3B,EAEF,OAAO2C,CACT,CAaAsG,gBAAgBpI,EAAMD,EAAMhK,EAAOgS,EAAO,CACxC,GAAM,CAAC/J,OAAAA,EAAQC,OAAAA,CAAAA,EAAU+B,EACnB,CAAC0I,SAAAA,EAAW,IAAKC,SAAAA,EAAW,GAAA,EAAO,KAAKrE,SACxCxC,EAAS,IAAIvB,MAAMwH,CAAAA,EACrBpR,EAAGuI,EAAMC,EAAOtI,EAEpB,IAAKF,EAAI,EAAGuI,EAAO6I,EAAOpR,EAAIuI,EAAM,EAAEvI,EACpCwI,EAAQxI,EAAIZ,EACZc,EAAOkJ,EAAKZ,CAAM,EAClB2C,EAAOnL,CAAAA,EAAK,CACVuH,EAAGF,EAAO8J,MAAMc,GAAiB/R,EAAM6R,CAAWvJ,EAAAA,CAAAA,EAClDhB,EAAGF,EAAO6J,MAAMc,GAAiB/R,EAAM8R,CAAWxJ,EAAAA,CAAAA,CACpD,EAEF,OAAO2C,CACT,CAKA+G,UAAU1J,EAAO,CACf,OAAO,KAAK4C,YAAYsB,QAAQlE,CAAM,CACxC,CAKA2J,eAAe3J,EAAO,CACpB,OAAO,KAAK4C,YAAYhC,KAAKZ,CAAM,CACrC,CAKAC,WAAW1B,EAAOoE,EAAQtC,EAAM,CAC9B,IAAMvK,EAAQ,KAAKA,MACb+K,EAAO,KAAK+B,YACZ3E,EAAQ0E,EAAOpE,EAAM0C,IAAI,EACzBf,EAAQ,CACZvD,KAAMgD,GAAwB7J,EAAO,EAAI,EACzCuH,OAAQsF,EAAOE,QAAQtE,EAAM0C,IAAI,EAAEmC,aACrC,EACA,OAAOnD,GAAWC,EAAOjC,EAAO4C,EAAKb,MAAO,CAACK,KAAAA,CAAI,CAAA,CACnD,CAKAuJ,sBAAsBC,EAAOtL,EAAOoE,EAAQzC,EAAO,CACjD,IAAM4J,EAAcnH,EAAOpE,EAAM0C,IAAI,EACjChD,EAAQ6L,IAAgB,KAAOC,IAAMD,EACnCzM,EAAS6C,GAASyC,EAAOE,QAAQtE,EAAM0C,IAAI,EAC7Cf,GAAS7C,IACX6C,EAAM7C,OAASA,EACfY,EAAQgC,GAAWC,EAAO4J,EAAa,KAAKlH,YAAY5C,KAAK,GAE/D6J,EAAMlT,IAAMD,KAAKC,IAAIkT,EAAMlT,IAAKsH,CAAAA,EAChC4L,EAAM/Q,IAAMpC,KAAKoC,IAAI+Q,EAAM/Q,IAAKmF,CAAAA,CAClC,CAKA+L,UAAUzL,EAAOiG,EAAU,CACzB,IAAM3D,EAAO,KAAK+B,YACZsB,EAAUrD,EAAKqD,QACf2E,EAAShI,EAAKiI,SAAWvK,IAAUsC,EAAKC,OACxCf,EAAOmE,EAAQ3M,OACf0S,EAAa,KAAKzC,eAAejJ,CAAAA,EACjC2B,EAAQqE,GAAYC,EAAU3D,EAAM,KAAK/K,KAAK,EAC9C+T,EAAQ,CAAClT,IAAKmL,OAAOE,kBAAmBlJ,IAAKgJ,OAAOC,iBAAiB,EACrE,CAACpL,IAAKuT,EAAUpR,IAAKqR,CAAQ,EAAIxI,GAAcsI,CAAAA,EACjDzS,EAAGmL,EAEP,SAASyH,GAAQ,CACfzH,EAASuB,EAAQ1M,CAAE,EACnB,IAAM+I,EAAaoC,EAAOsH,EAAWhJ,IAAI,EACzC,MAAO,CAACR,GAASkC,EAAOpE,EAAM0C,IAAI,CAAC,GAAKiJ,EAAW3J,GAAc4J,EAAW5J,CAC9E,CAEA,IAAK/I,EAAI,EAAGA,EAAIuI,GACVqK,GAAAA,EAAS,IAGb,KAAKR,sBAAsBC,EAAOtL,EAAOoE,EAAQzC,CAAAA,EAC7C2I,IALgB,EAAErR,EACtB,CASF,GAAIqR,GAEF,IAAKrR,EAAIuI,EAAO,EAAGvI,GAAK,EAAG,EAAEA,EAC3B,GAAI4S,CAAAA,EAAS,EAGb,MAAKR,sBAAsBC,EAAOtL,EAAOoE,EAAQzC,CAAAA,EACjD,OAGJ,OAAO2J,CACT,CAEAQ,mBAAmB9L,EAAO,CACxB,IAAMoE,EAAS,KAAKC,YAAYsB,QAC1B7G,EAAS,CAAA,EACX7F,EAAGuI,EAAM9B,EAEb,IAAKzG,EAAI,EAAGuI,EAAO4C,EAAOpL,OAAQC,EAAIuI,EAAM,EAAEvI,EAC5CyG,EAAQ0E,EAAOnL,CAAAA,EAAG+G,EAAM0C,IAAI,EACxBR,GAASxC,CAAQ,GACnBZ,EAAO7E,KAAKyF,CAAAA,EAGhB,OAAOZ,CACT,CAMAiN,gBAAiB,CACf,MAAO,EACT,CAKAC,iBAAiBvK,EAAO,CACtB,IAAMa,EAAO,KAAK+B,YACZ9B,EAASD,EAAKC,OACdC,EAASF,EAAKE,OACd4B,EAAS,KAAK+G,UAAU1J,CAAAA,EAC9B,MAAO,CACLwK,MAAO1J,EAAS,GAAKA,EAAO2J,iBAAiB9H,EAAO7B,EAAOG,IAAI,CAAC,EAAI,GACpEhD,MAAO8C,EAAS,GAAKA,EAAO0J,iBAAiB9H,EAAO5B,EAAOE,IAAI,CAAC,EAAI,EACtE,CACF,CAKAhK,QAAQoJ,EAAM,CACZ,IAAMQ,EAAO,KAAK+B,YAClB,KAAKnH,OAAO4E,GAAQ,SAAA,EACpBQ,EAAK6J,MAAQrL,GAAOoH,GAAe,KAAKlJ,QAAQoN,KAAM/L,GAAYiC,EAAKhC,OAAQgC,EAAK/B,OAAQ,KAAKwL,eAAc,CAAA,CAAA,CAAA,CACjH,CAKA7O,OAAO4E,EAAM,CAAA,CAEb5I,MAAO,CACL,IAAMsN,EAAM,KAAKD,KACXhP,EAAQ,KAAKA,MACb+K,EAAO,KAAK+B,YACZgI,EAAW/J,EAAKD,MAAQ,CAAA,EACxBiK,EAAO/U,EAAMgV,UACbtP,EAAS,CAAA,EACT5E,EAAQ,KAAK2O,YAAc,EAC3BqD,EAAQ,KAAKpD,YAAeoF,EAASrT,OAASX,EAC9CmU,EAA0B,KAAKxN,QAAQwN,wBACzCvT,EAMJ,IAJIqJ,EAAK+C,SACP/C,EAAK+C,QAAQnM,KAAKsN,EAAK8F,EAAMjU,EAAOgS,CAAAA,EAGjCpR,EAAIZ,EAAOY,EAAIZ,EAAQgS,EAAO,EAAEpR,EAAG,CACtC,IAAMsM,EAAU8G,EAASpT,CAAE,EACvBsM,EAAQW,SAGRX,EAAQtI,QAAUuP,EACpBvP,EAAOhD,KAAKsL,CAAAA,EAEZA,EAAQrM,KAAKsN,EAAK8F,CAAAA,EAEtB,CAEA,IAAKrT,EAAI,EAAGA,EAAIgE,EAAOjE,OAAQ,EAAEC,EAC/BgE,EAAOhE,CAAAA,EAAGC,KAAKsN,EAAK8F,CAAAA,CAExB,CASAG,SAAShL,EAAOxE,EAAQ,CACtB,IAAM6E,EAAO7E,EAAS,SAAW,UACjC,OAAOwE,IAAUpK,QAAa,KAAKgN,YAAYgB,QAC3C,KAAKqH,6BAA6B5K,CAAAA,EAClC,KAAK6K,0BAA0BlL,GAAS,EAAGK,CAAK,CACtD,CAKAoI,WAAWzI,EAAOxE,EAAQ6E,EAAM,CAC9B,IAAMuD,EAAU,KAAKyC,WAAU,EAC3B8E,EACJ,GAAInL,GAAS,GAAKA,EAAQ,KAAK4C,YAAYhC,KAAKrJ,OAAQ,CACtD,IAAMuM,EAAU,KAAKlB,YAAYhC,KAAKZ,CAAM,EAC5CmL,EAAUrH,EAAQ6B,WACf7B,EAAQ6B,SAAW9B,GAAkB,KAAK4E,WAAU,EAAIzI,EAAO8D,CAAO,GACzEqH,EAAQxI,OAAS,KAAK+G,UAAU1J,CAAAA,EAChCmL,EAAQnH,IAAMJ,EAAQhD,KAAKZ,CAAM,EACjCmL,EAAQnL,MAAQmL,EAAQpH,UAAY/D,OAEpCmL,EAAU,KAAKxF,WACZ,KAAKA,SAAWlC,GAAqB,KAAK3N,MAAM2S,WAAU,EAAI,KAAKzI,KAAK,GAC3EmL,EAAQvH,QAAUA,EAClBuH,EAAQnL,MAAQmL,EAAQ7K,aAAe,KAAKN,MAG9CmL,OAAAA,EAAQ3P,OAAS,CAAC,CAACA,EACnB2P,EAAQ9K,KAAOA,EACR8K,CACT,CAMAF,6BAA6B5K,EAAM,CACjC,OAAO,KAAK+K,uBAAuB,KAAKxG,mBAAmBlD,GAAIrB,CAAAA,CACjE,CAOA6K,0BAA0BlL,EAAOK,EAAM,CACrC,OAAO,KAAK+K,uBAAuB,KAAKvG,gBAAgBnD,GAAIrB,EAAML,CAAAA,CACpE,CAKAoL,uBAAuBC,EAAahL,EAAO,UAAWL,EAAO,CAC3D,IAAMxE,EAAS6E,IAAS,SAClBiL,EAAQ,KAAKtG,gBACbuG,EAAWF,EAAc,IAAMhL,EAC/BgE,EAASiH,EAAMC,CAAS,EACxBC,EAAU,KAAK/F,qBAAuBgG,GAAQzL,CAAAA,EACpD,GAAIqE,EACF,OAAOD,GAAiBC,EAAQmH,CAAAA,EAElC,IAAMpP,EAAS,KAAKtG,MAAMsG,OACpBgM,EAAYhM,EAAOsP,wBAAwB,KAAKxG,MAAOmG,CAAAA,EACvDM,EAAWnQ,EAAS,CAAC,GAAG6P,CAAY,QAAQ,QAASA,EAAa,IAAM,CAACA,EAAa,EAAG,EACzF/C,EAASlM,EAAOmM,gBAAgB,KAAKlC,WAAU,EAAI+B,CAAAA,EACnDwD,EAAQlP,OAAOC,KAAKC,GAASgO,SAASS,CAAY,CAAA,EAGlDF,EAAU,IAAM,KAAK1C,WAAWzI,EAAOxE,EAAQ6E,CAAAA,EAC/ChD,EAASjB,EAAOyP,oBAAoBvD,EAAQsD,EAAOT,EAASQ,CAAAA,EAElE,OAAItO,EAAOM,UAGTN,EAAOM,QAAU6N,EAKjBF,EAAMC,CAAS,EAAG7O,OAAOoP,OAAO1H,GAAiB/G,EAAQmO,CAAAA,CAAAA,GAGpDnO,CACT,CAMA0O,mBAAmB/L,EAAOgM,EAAYxQ,EAAQ,CAC5C,IAAM1F,EAAQ,KAAKA,MACbwV,EAAQ,KAAKtG,gBACbuG,EAAW,aAAaS,CAAAA,GACxB3H,EAASiH,EAAMC,CAAS,EAC9B,GAAIlH,EACF,OAAOA,EAET,IAAI9G,EACJ,GAAIzH,EAAMyH,QAAQV,YAAc,GAAO,CACrC,IAAMT,EAAS,KAAKtG,MAAMsG,OACpBgM,EAAYhM,EAAO6P,0BAA0B,KAAK/G,MAAO8G,CAAAA,EACzD1D,EAASlM,EAAOmM,gBAAgB,KAAKlC,WAAU,EAAI+B,CAAAA,EACzD7K,EAAUnB,EAAOoM,eAAeF,EAAQ,KAAKG,WAAWzI,EAAOxE,EAAQwQ,CAAAA,CAAAA,EAEzE,IAAMvO,EAAa,IAAItB,GAAWrG,EAAOyH,GAAWA,EAAQE,UAAU,EACtE,OAAIF,GAAWA,EAAQ2O,aACrBZ,EAAMC,CAAAA,EAAY7O,OAAOoP,OAAOrO,CAAAA,GAE3BA,CACT,CAMA0O,iBAAiB5O,EAAS,CACxB,GAAKA,EAAQI,QAGb,OAAO,KAAK2H,iBAAmB,KAAKA,eAAiB5I,OAAOyB,OAAO,CAAA,EAAIZ,CAAO,EAChF,CAMA6O,eAAe/L,EAAMgM,EAAe,CAClC,MAAO,CAACA,GAAiBlI,GAAmB9D,CAAAA,GAAS,KAAKvK,MAAMwW,mBAClE,CAKAC,kBAAkB3V,EAAOyJ,EAAM,CAC7B,IAAMmM,EAAY,KAAKtB,0BAA0BtU,EAAOyJ,CAAAA,EAClDoM,EAA0B,KAAKnH,eAC/B+G,EAAgB,KAAKF,iBAAiBK,CAAAA,EACtCJ,EAAiB,KAAKA,eAAe/L,EAAMgM,CAAAA,GAAmBA,IAAkBI,EACtF,YAAKC,oBAAoBL,EAAehM,EAAMmM,CAAAA,EACvC,CAACH,cAAAA,EAAeD,eAAAA,CAAc,CACvC,CAMAO,cAAc7I,EAAS9D,EAAO7C,EAAYkD,EAAM,CAC1C8D,GAAmB9D,CAAO,EAC5B3D,OAAOyB,OAAO2F,EAAS3G,CAAAA,EAEvB,KAAK4O,mBAAmB/L,EAAOK,CAAM5E,EAAAA,OAAOqI,EAAS3G,CAAAA,CAEzD,CAMAuP,oBAAoBL,EAAehM,EAAM/C,EAAY,CAC/C+O,GAAiB,CAAClI,GAAmB9D,CAAO,GAC9C,KAAK0L,mBAAmBnW,OAAWyK,CAAM5E,EAAAA,OAAO4Q,EAAe/O,CAAAA,CAEnE,CAKAsP,UAAU9I,EAAS9D,EAAOK,EAAM7E,EAAQ,CACtCsI,EAAQtI,OAASA,EACjB,IAAM+B,EAAU,KAAKyN,SAAShL,EAAOxE,CAAAA,EACrC,KAAKuQ,mBAAmB/L,EAAOK,EAAM7E,CAAQC,EAAAA,OAAOqI,EAAS,CAG3DvG,QAAS,CAAE/B,GAAU,KAAK2Q,iBAAiB5O,CAAaA,GAAAA,CAC1D,CAAA,CACF,CAEAsP,iBAAiB/I,EAASxD,EAAcN,EAAO,CAC7C,KAAK4M,UAAU9I,EAAS9D,EAAO,SAAU,EAAK,CAChD,CAEA8M,cAAchJ,EAASxD,EAAcN,EAAO,CAC1C,KAAK4M,UAAU9I,EAAS9D,EAAO,SAAU,EAAI,CAC/C,CAKA+M,0BAA2B,CACzB,IAAMjJ,EAAU,KAAKlB,YAAYgB,QAE7BE,GACF,KAAK8I,UAAU9I,EAASlO,OAAW,SAAU,EAAK,CAEtD,CAKAoX,uBAAwB,CACtB,IAAMlJ,EAAU,KAAKlB,YAAYgB,QAE7BE,GACF,KAAK8I,UAAU9I,EAASlO,OAAW,SAAU,EAAI,CAErD,CAKAuS,gBAAgBH,EAAkB,CAChC,IAAMpH,EAAO,KAAKwE,MACZwF,EAAW,KAAKhI,YAAYhC,KAGlC,OAAW,CAAC1E,EAAQ+Q,EAAMC,CAAAA,IAAS,KAAKtH,UACtC,KAAK1J,CAAO,EAAC+Q,EAAMC,CAAAA,EAErB,KAAKtH,UAAY,CAAA,EAEjB,IAAMuH,EAAUvC,EAASrT,OACnB6V,EAAUxM,EAAKrJ,OACfqR,EAAQlS,KAAKC,IAAIyW,EAASD,CAAAA,EAE5BvE,GAKF,KAAKD,MAAM,EAAGC,CAAAA,EAGZwE,EAAUD,EACZ,KAAKE,gBAAgBF,EAASC,EAAUD,EAASnF,CAAAA,EACxCoF,EAAUD,GACnB,KAAKG,gBAAgBF,EAASD,EAAUC,CAAAA,CAE5C,CAKAC,gBAAgBzW,EAAOgS,EAAOZ,EAAmB,GAAM,CACrD,IAAMnH,EAAO,KAAK+B,YACZhC,EAAOC,EAAKD,KACZjC,EAAM/H,EAAQgS,EAChBpR,EAEE+V,EAAQC,GAAQ,CAEpB,IADAA,EAAIjW,QAAUqR,EACTpR,EAAIgW,EAAIjW,OAAS,EAAGC,GAAKmH,EAAKnH,IACjCgW,EAAIhW,CAAE,EAAGgW,EAAIhW,EAAIoR,CAAM,CAE3B,EAGA,IAFA2E,EAAK3M,CAAAA,EAEApJ,EAAIZ,EAAOY,EAAImH,EAAK,EAAEnH,EACzBoJ,EAAKpJ,CAAE,EAAG,IAAI,KAAKqN,gBAGjB,KAAKM,UACPoI,EAAK1M,EAAKqD,OAAO,EAEnB,KAAKyE,MAAM/R,EAAOgS,CAAAA,EAEdZ,GACF,KAAKyF,eAAe7M,EAAMhK,EAAOgS,EAAO,OAAA,CAE5C,CAEA6E,eAAe3J,EAASlN,EAAOgS,EAAOvI,EAAM,CAAA,CAK5CiN,gBAAgB1W,EAAOgS,EAAO,CAC5B,IAAM/H,EAAO,KAAK+B,YAClB,GAAI,KAAKuC,SAAU,CACjB,IAAMuI,EAAU7M,EAAKqD,QAAQyJ,OAAO/W,EAAOgS,CAAAA,EACvC/H,EAAK6D,UACPT,GAAYpD,EAAM6M,CAAAA,EAGtB7M,EAAKD,KAAK+M,OAAO/W,EAAOgS,CAAAA,CAC1B,CAKAgF,MAAMC,EAAM,CACV,GAAI,KAAK1I,SACP,KAAKS,UAAUpN,KAAKqV,CAAAA,MACf,CACL,GAAM,CAAC3R,EAAQ+Q,EAAMC,CAAAA,EAAQW,EAC7B,KAAK3R,CAAO,EAAC+Q,EAAMC,CAAAA,EAErB,KAAKpX,MAAMgY,aAAatV,KAAK,CAAC,KAAKwH,MAAU6N,GAAAA,CAAK,CAAA,CACpD,CAEAE,aAAc,CACZ,IAAMnF,EAAQoF,UAAUzW,OACxB,KAAKqW,MAAM,CAAC,kBAAmB,KAAKvH,WAAU,EAAGzF,KAAKrJ,OAASqR,EAAOA,CAAM,CAAA,CAC9E,CAEAqF,YAAa,CACX,KAAKL,MAAM,CAAC,kBAAmB,KAAKhL,YAAYhC,KAAKrJ,OAAS,EAAG,CAAE,CAAA,CACrE,CAEA2W,cAAe,CACb,KAAKN,MAAM,CAAC,kBAAmB,EAAG,CAAE,CAAA,CACtC,CAEAO,cAAcvX,EAAOgS,EAAO,CACtBA,GACF,KAAKgF,MAAM,CAAC,kBAAmBhX,EAAOgS,CAAM,CAAA,EAE9C,IAAMwF,EAAWJ,UAAUzW,OAAS,EAChC6W,GACF,KAAKR,MAAM,CAAC,kBAAmBhX,EAAOwX,CAAS,CAAA,CAEnD,CAEAC,gBAAiB,CACf,KAAKT,MAAM,CAAC,kBAAmB,EAAGI,UAAUzW,MAAO,CAAA,CACrD,CACF,EC9iCA,SAAS+W,GAAkB/P,EAAOtI,EAAM,CACtC,GAAI,CAACsI,EAAMgQ,OAAOC,KAAM,CACtB,IAAMC,EAAelQ,EAAMiE,wBAAwBvM,CAAAA,EAC/CoH,EAAS,CAAA,EAEb,QAAS7F,EAAI,EAAGuI,EAAO0O,EAAalX,OAAQC,EAAIuI,EAAMvI,IACpD6F,EAASA,EAAOqR,OAAOD,EAAajX,CAAAA,EAAGkL,WAAW2H,mBAAmB9L,CAAAA,CAAAA,EAEvEA,EAAMgQ,OAAOC,KAAOG,GAAatR,EAAOuR,KAAK,CAACC,EAAGrP,IAAMqP,EAAIrP,CAAAA,CAAAA,EAE7D,OAAOjB,EAAMgQ,OAAOC,IACtB,CAMA,SAASM,GAAqBjO,EAAM,CAClC,IAAMtC,EAAQsC,EAAKC,OACbzD,EAASiR,GAAkB/P,EAAOsC,EAAK5K,IAAI,EAC7CU,EAAM4H,EAAMwQ,QACZvX,EAAGuI,EAAMiP,EAAMjG,EACbkG,EAAmB,IAAM,CACzBD,IAAS,OAASA,IAAS,SAI3BvD,GAAQ1C,CAAO,IAEjBpS,EAAMD,KAAKC,IAAIA,EAAKD,KAAKwY,IAAIF,EAAOjG,CAASpS,GAAAA,CAAAA,GAE/CoS,EAAOiG,EACT,EAEA,IAAKxX,EAAI,EAAGuI,EAAO1C,EAAO9F,OAAQC,EAAIuI,EAAM,EAAEvI,EAC5CwX,EAAOzQ,EAAM4Q,iBAAiB9R,EAAO7F,CAAE,CAAA,EACvCyX,EAAAA,EAIF,IADAlG,EAAOnT,OACF4B,EAAI,EAAGuI,EAAOxB,EAAM6Q,MAAM7X,OAAQC,EAAIuI,EAAM,EAAEvI,EACjDwX,EAAOzQ,EAAM8Q,gBAAgB7X,CAAAA,EAC7ByX,EAAAA,EAGF,OAAOtY,CACT,CAQA,SAAS2Y,GAAyBtP,EAAOuP,EAAOhS,EAASiS,EAAY,CACnE,IAAMC,EAAYlS,EAAQmS,aACtBxR,EAAMyR,EAEV,OAAIC,GAAcH,CAAY,GAC5BvR,EAAOqR,EAAM5Y,IAAM4G,EAAQsS,mBAC3BF,EAAQpS,EAAQuS,gBAKhB5R,EAAOuR,EAAYD,EACnBG,EAAQ,GAGH,CACLI,MAAO7R,EAAOsR,EACdG,MAAAA,EACA/Y,MAAO2Y,EAAMS,OAAOhQ,CAAAA,EAAU9B,EAAO,CACvC,CACF,CAQA,SAAS+R,GAA0BjQ,EAAOuP,EAAOhS,EAASiS,EAAY,CACpE,IAAMQ,EAAST,EAAMS,OACfhB,EAAOgB,EAAOhQ,CAAM,EACtB+I,EAAO/I,EAAQ,EAAIgQ,EAAOhQ,EAAQ,CAAA,EAAK,KACvCkQ,EAAOlQ,EAAQgQ,EAAOzY,OAAS,EAAIyY,EAAOhQ,EAAQ,CAAE,EAAG,KACrDmQ,EAAU5S,EAAQsS,mBAEpB9G,IAAS,OAGXA,EAAOiG,GAAQkB,IAAS,KAAOX,EAAM5Q,IAAM4Q,EAAM3Y,MAAQsZ,EAAOlB,IAG9DkB,IAAS,OAEXA,EAAOlB,EAAOA,EAAOjG,GAGvB,IAAMnS,EAAQoY,GAAQA,EAAOtY,KAAKC,IAAIoS,EAAMmH,CAAI,GAAK,EAAIC,EAGzD,MAAO,CACLJ,MAHWrZ,KAAKwY,IAAIgB,EAAOnH,CAAAA,EAAQ,EAAIoH,EAGzBX,EACdG,MAAOpS,EAAQuS,cACflZ,MAAAA,CACF,CACF,CAEA,SAASwZ,GAAcC,EAAO3Y,EAAMqJ,EAAQvJ,EAAG,CAC7C,IAAM8Y,EAAavP,EAAO4H,MAAM0H,EAAM,CAAA,EAAI7Y,CAAAA,EACpC+Y,EAAWxP,EAAO4H,MAAM0H,EAAM,CAAA,EAAI7Y,CAAAA,EAClCb,EAAMD,KAAKC,IAAI2Z,EAAYC,CAAAA,EAC3BzX,EAAMpC,KAAKoC,IAAIwX,EAAYC,CAAAA,EAC7BC,EAAW7Z,EACX8Z,EAAS3X,EAETpC,KAAKwY,IAAIvY,CAAAA,EAAOD,KAAKwY,IAAIpW,CAAM,IACjC0X,EAAW1X,EACX2X,EAAS9Z,GAKXe,EAAKqJ,EAAOE,IAAI,EAAIwP,EAEpB/Y,EAAKgZ,QAAU,CACbF,SAAAA,EACAC,OAAAA,EACA7Z,MAAO0Z,EACP3R,IAAK4R,EACL5Z,IAAAA,EACAmC,IAAAA,CACF,CACF,CAEA,SAAS6X,GAAWN,EAAO3Y,EAAMqJ,EAAQvJ,EAAG,CAC1C,OAAI0F,GAAQmT,CAAQ,EAClBD,GAAcC,EAAO3Y,EAAMqJ,EAAQvJ,CAAAA,EAEnCE,EAAKqJ,EAAOE,IAAI,EAAIF,EAAO4H,MAAM0H,EAAO7Y,CAAAA,EAEnCE,CACT,CAEA,SAASkZ,GAAsB/P,EAAMD,EAAMhK,EAAOgS,EAAO,CACvD,IAAM9H,EAASD,EAAKC,OACdC,EAASF,EAAKE,OACdqI,EAAStI,EAAOuI,UAAS,EACzBC,EAAcxI,IAAWC,EACzB4B,EAAS,CAAA,EACXnL,EAAGuI,EAAMrI,EAAM2Y,EAEnB,IAAK7Y,EAAIZ,EAAOmJ,EAAOnJ,EAAQgS,EAAOpR,EAAIuI,EAAM,EAAEvI,EAChD6Y,EAAQzP,EAAKpJ,CAAE,EACfE,EAAO,CAAA,EACPA,EAAKoJ,EAAOG,IAAI,EAAIqI,GAAexI,EAAO6H,MAAMS,EAAO5R,CAAAA,EAAIA,CAAAA,EAC3DmL,EAAOnK,KAAKmY,GAAWN,EAAO3Y,EAAMqJ,EAAQvJ,CAAAA,CAAAA,EAE9C,OAAOmL,CACT,CAEA,SAASkO,GAAWC,EAAQ,CAC1B,OAAOA,GAAUA,EAAON,WAAa5a,QAAakb,EAAOL,SAAW7a,MACtE,CAEA,SAASmb,GAAQ7S,EAAM6C,EAAQiQ,EAAY,CACzC,OAAI9S,IAAS,EACJwC,GAAKxC,CAAAA,GAEN6C,EAAOkQ,aAAY,EAAK,EAAI,KAAOlQ,EAAOpK,KAAOqa,EAAa,EAAI,GAC5E,CAEA,SAASE,GAAY/T,EAAY,CAC/B,IAAIuB,EAAS9H,EAAO+H,EAAKM,EAAKE,EAC9B,OAAIhC,EAAWgU,YACbzS,EAAUvB,EAAWiU,KAAOjU,EAAW4B,EACvCnI,EAAQ,OACR+H,EAAM,UAEND,EAAUvB,EAAWiU,KAAOjU,EAAW6B,EACvCpI,EAAQ,SACR+H,EAAM,OAEJD,GACFO,EAAM,MACNE,EAAS,UAETF,EAAM,QACNE,EAAS,OAEJ,CAACvI,MAAAA,EAAO+H,IAAAA,EAAKD,QAAAA,EAASO,IAAAA,EAAKE,OAAAA,CAAM,CAC1C,CAEA,SAASkS,GAAiBlU,EAAYI,EAAS2C,EAAOF,EAAO,CAC3D,IAAIsR,EAAO/T,EAAQgU,cACbxV,EAAM,CAAA,EAEZ,GAAI,CAACuV,EAAM,CACTnU,EAAWoU,cAAgBxV,EAC3B,OAGF,GAAIuV,IAAS,GAAM,CACjBnU,EAAWoU,cAAgB,CAACtS,IAAK,GAAMC,MAAO,GAAMC,OAAQ,GAAMC,KAAM,EAAI,EAC5E,OAGF,GAAM,CAACxI,MAAAA,EAAO+H,IAAAA,EAAKD,QAAAA,EAASO,IAAAA,EAAKE,OAAAA,CAAAA,EAAU+R,GAAY/T,CAAAA,EAEnDmU,IAAS,UAAYpR,IACvB/C,EAAWqU,mBAAqB,IAC3BtR,EAAM+C,MAAQ,KAAOjD,EACxBsR,EAAOrS,GACGiB,EAAMgD,SAAW,KAAOlD,EAClCsR,EAAOnS,GAEPpD,EAAI0V,GAAUtS,EAAQvI,EAAO+H,EAAKD,CAAAA,CAAAA,EAAY,GAC9C4S,EAAOrS,IAIXlD,EAAI0V,GAAUH,EAAM1a,EAAO+H,EAAKD,CAAAA,CAAAA,EAAY,GAC5CvB,EAAWoU,cAAgBxV,CAC7B,CAEA,SAAS0V,GAAUH,EAAMzC,EAAGrP,EAAGd,EAAS,CACtC,OAAIA,GACF4S,EAAOI,GAAKJ,EAAMzC,EAAGrP,CAAAA,EACrB8R,EAAOK,GAASL,EAAM9R,EAAGqP,CAAAA,GAEzByC,EAAOK,GAASL,EAAMzC,EAAGrP,CAAAA,EAEpB8R,CACT,CAEA,SAASI,GAAKE,EAAMC,EAAIC,EAAI,CAC1B,OAAOF,IAASC,EAAKC,EAAKF,IAASE,EAAKD,EAAKD,CAC/C,CAEA,SAASD,GAASI,EAAGnb,EAAO+H,EAAK,CAC/B,OAAOoT,IAAM,QAAUnb,EAAQmb,IAAM,MAAQpT,EAAMoT,CACrD,CAEA,SAASC,GAAiB7U,EAAY,CAAC8U,cAAAA,CAAAA,EAAgBtC,EAAO,CAC5DxS,EAAW8U,cAAgBA,IAAkB,OACzCtC,IAAU,EAAI,IAAO,EACrBsC,CACN,CAEe,IAAMC,GAAN,cAA4BvN,EAAAA,CAEzC,OAAOjD,GAAK,MAKZ,OAAO9E,SAAW,CAChBgI,mBAAoB,GACpBC,gBAAiB,MAEjBgL,mBAAoB,GACpBC,cAAe,GACfqC,QAAS,GAET1U,WAAY,CACV2U,QAAS,CACPnc,KAAM,SACNkH,WAAY,CAAC,IAAK,IAAK,OAAQ,QAAS,QAAS,CACnD,CACF,GAMF,OAAOkV,UAAY,CACjB/O,OAAQ,CACNgP,QAAS,CACPrc,KAAM,WACNsc,OAAQ,GACRC,KAAM,CACJD,OAAQ,EACV,CACF,EACAE,QAAS,CACPxc,KAAM,SACNyc,YAAa,EACf,CACF,GASFxJ,mBAAmBrI,EAAMD,EAAMhK,EAAOgS,EAAO,CAC3C,OAAOgI,GAAsB/P,EAAMD,EAAMhK,EAAOgS,CAAAA,CAClD,CAOAI,eAAenI,EAAMD,EAAMhK,EAAOgS,EAAO,CACvC,OAAOgI,GAAsB/P,EAAMD,EAAMhK,EAAOgS,CAAAA,CAClD,CAOAK,gBAAgBpI,EAAMD,EAAMhK,EAAOgS,EAAO,CACxC,GAAM,CAAC9H,OAAAA,EAAQC,OAAAA,CAAAA,EAAUF,EACnB,CAAC0I,SAAAA,EAAW,IAAKC,SAAAA,EAAW,GAAA,EAAO,KAAKrE,SACxCnE,EAAWF,EAAOG,OAAS,IAAMsI,EAAWC,EAC5CtI,EAAWH,EAAOE,OAAS,IAAMsI,EAAWC,EAC5C7G,EAAS,CAAA,EACXnL,EAAGuI,EAAMrI,EAAMib,EACnB,IAAKnb,EAAIZ,EAAOmJ,EAAOnJ,EAAQgS,EAAOpR,EAAIuI,EAAM,EAAEvI,EAChDmb,EAAM/R,EAAKpJ,CAAE,EACbE,EAAO,CAAA,EACPA,EAAKoJ,EAAOG,IAAI,EAAIH,EAAO6H,MAAMc,GAAiBkJ,EAAK3R,CAAWxJ,EAAAA,CAAAA,EAClEmL,EAAOnK,KAAKmY,GAAWlH,GAAiBkJ,EAAKzR,CAAAA,EAAWxJ,EAAMqJ,EAAQvJ,CAAAA,CAAAA,EAExE,OAAOmL,CACT,CAKAiH,sBAAsBC,EAAOtL,EAAOoE,EAAQzC,EAAO,CACjD,MAAM0J,sBAAsBC,EAAOtL,EAAOoE,EAAQzC,CAAAA,EAClD,IAAM4Q,EAASnO,EAAO+N,QAClBI,GAAUvS,IAAU,KAAKqE,YAAY7B,SAEvC8I,EAAMlT,IAAMD,KAAKC,IAAIkT,EAAMlT,IAAKma,EAAOna,GAAG,EAC1CkT,EAAM/Q,IAAMpC,KAAKoC,IAAI+Q,EAAM/Q,IAAKgY,EAAOhY,GAAG,EAE9C,CAMAwR,gBAAiB,CACf,MAAO,EACT,CAKAC,iBAAiBvK,EAAO,CACtB,IAAMa,EAAO,KAAK+B,YACZ,CAAC9B,OAAAA,EAAQC,OAAAA,CAAAA,EAAUF,EACnB8B,EAAS,KAAK+G,UAAU1J,CAAAA,EACxB8Q,EAASnO,EAAO+N,QAChBzS,EAAQ4S,GAAWC,CACrB,EAAA,IAAMA,EAAOla,MAAQ,KAAOka,EAAOnS,IAAM,IACzC,GAAKoC,EAAO0J,iBAAiB9H,EAAO5B,EAAOE,IAAI,CAAC,EAEpD,MAAO,CACLuJ,MAAO,GAAK1J,EAAO2J,iBAAiB9H,EAAO7B,EAAOG,IAAI,CAAC,EACvDhD,MAAAA,CACF,CACF,CAEA4H,YAAa,CACX,KAAKJ,oBAAsB,GAE3B,MAAMI,WAAU,EAEhB,IAAMhF,EAAO,KAAK+B,YAClB/B,EAAKX,MAAQ,KAAKmG,WAAU,EAAGnG,KACjC,CAEAzE,OAAO4E,EAAM,CACX,IAAMQ,EAAO,KAAK+B,YAClB,KAAK6K,eAAe5M,EAAKD,KAAM,EAAGC,EAAKD,KAAKrJ,OAAQ8I,CAAAA,CACtD,CAEAoN,eAAemF,EAAMhc,EAAOgS,EAAOvI,EAAM,CACvC,IAAMoH,EAAQpH,IAAS,QACjB,CAACL,MAAAA,EAAO4C,YAAa,CAAC7B,OAAAA,CAAAA,CAAO,EAAI,KACjCqQ,EAAOrQ,EAAO8R,aAAY,EAC1B1B,EAAapQ,EAAOkQ,aAAY,EAChC1B,EAAQ,KAAKuD,UAAS,EACtB,CAACzG,cAAAA,EAAeD,eAAAA,CAAc,EAAI,KAAKG,kBAAkB3V,EAAOyJ,CAAAA,EAEtE,QAAS7I,EAAIZ,EAAOY,EAAIZ,EAAQgS,EAAOpR,IAAK,CAC1C,IAAMmL,EAAS,KAAK+G,UAAUlS,CAAAA,EACxBub,EAAUtL,GAASmI,GAAcjN,EAAO5B,EAAOE,IAAI,CAAC,EAAI,CAACmQ,KAAAA,EAAM4B,KAAM5B,CAAI,EAAI,KAAK6B,yBAAyBzb,CAAE,EAC7G0b,EAAU,KAAKC,yBAAyB3b,EAAG+X,CAAAA,EAC3CrP,GAASyC,EAAOE,SAAW,CAAA,GAAI9B,EAAOE,IAAI,EAE1C9D,EAAa,CACjBgU,WAAAA,EACAC,KAAM2B,EAAQ3B,KACdI,mBAAoB,CAACtR,GAAS2Q,GAAWlO,EAAO+N,OAAO,GAAM1Q,IAAUE,EAAM+C,MAAQjD,IAAUE,EAAMgD,QACrGnE,EAAGoS,EAAa4B,EAAQC,KAAOE,EAAQE,OACvCpU,EAAGmS,EAAa+B,EAAQE,OAASL,EAAQC,KACzCK,OAAQlC,EAAa+B,EAAQhV,KAAOxH,KAAKwY,IAAI6D,EAAQ7U,IAAI,EACzDoV,MAAOnC,EAAaza,KAAKwY,IAAI6D,EAAQ7U,IAAI,EAAIgV,EAAQhV,IACvD,EAEIkO,IACFjP,EAAWI,QAAU8O,GAAiB,KAAKnB,0BAA0B1T,EAAGob,EAAKpb,CAAE,EAACgE,OAAS,SAAW6E,CAAI,GAE1G,IAAM9C,EAAUJ,EAAWI,SAAWqV,EAAKpb,CAAAA,EAAG+F,QAC9C8T,GAAiBlU,EAAYI,EAAS2C,EAAOF,CAAAA,EAC7CgS,GAAiB7U,EAAYI,EAASgS,EAAMI,KAAK,EACjD,KAAKhD,cAAciG,EAAKpb,CAAE,EAAEA,EAAG2F,EAAYkD,CAAAA,CAC7C,CACF,CASAkT,WAAWC,EAAMzP,EAAW,CAC1B,GAAM,CAACjD,OAAAA,CAAM,EAAI,KAAK8B,YAChB/C,EAAWiB,EAAO0B,wBAAwB,KAAK0C,KAAK,EACvD3B,OAAO1C,GAAQA,EAAK6B,WAAWnF,QAAQ4U,OAAO,EAC3C7Q,EAAUR,EAAOvD,QAAQ+D,QACzBY,EAAS,CAAA,EACTuR,EAAgB,KAAK7Q,YAAYF,WAAWgH,UAAU3F,CAAAA,EACtD2P,EAAcD,GAAiBA,EAAc3S,EAAOG,IAAI,EAExD0S,EAAY9S,GAAS,CACzB,IAAM8B,EAAS9B,EAAKqD,QAAQ0P,KAAKlc,GAAQA,EAAKoJ,EAAOG,IAAI,IAAMyS,CAAAA,EACzDG,EAAMlR,GAAUA,EAAO9B,EAAKE,OAAOE,IAAI,EAE7C,GAAI2O,GAAciE,CAAQC,GAAAA,MAAMD,CAAM,EACpC,MAAO,EAEX,EAEA,QAAWhT,KAAQhB,EACjB,GAAIkE,EAAAA,IAAcnO,QAAa+d,EAAS9S,CAAO,MAS3CS,IAAY,IAASY,EAAO6R,QAAQlT,EAAKX,KAAK,IAAM,IACzDoB,IAAY1L,QAAaiL,EAAKX,QAAUtK,SACrCsM,EAAO1J,KAAKqI,EAAKX,KAAK,EAEpBW,EAAKb,QAAUwT,GACjB,MAOJ,OAAKtR,EAAO3K,QACV2K,EAAO1J,KAAK5C,MAAAA,EAGPsM,CACT,CAMA8R,eAAehU,EAAO,CACpB,OAAO,KAAKuT,WAAW3d,OAAWoK,CAAAA,EAAOzI,MAC3C,CAEA0c,eAAgB,CACd,OAAO,KAAKC,SAAQ,EAAG3c,MACzB,CAEA4c,6BAA8B,CAC5B,IAAM7Q,EAAS,KAAKxN,MAAMwN,OACpB8Q,EAAe,KAAKte,MAAMyH,QAAQuJ,UACxC,OAAOpK,OAAOC,KAAK2G,CAAAA,EAAQC,OAAOvG,GAAOsG,EAAOtG,CAAI,EAACiE,OAASmT,CAAAA,EAAc5Q,MAAK,CACnF,CAEA0Q,UAAW,CACT,IAAMjT,EAAO,CAAA,EACPoT,EAAmB,KAAKF,4BAA2B,EACzD,QAAWvQ,KAAW,KAAK9N,MAAM8K,KAAKyG,SACpCpG,EAAKwF,GACH,KAAK3Q,MAAMyH,QAAQuJ,YAAc,IAAMlD,EAAQ4C,QAAU5C,EAAQ+C,QAAS0N,CAAAA,CAAAA,EACvE,GAEP,OAAO3X,OAAOC,KAAKsE,CAAAA,CACrB,CAUAqT,eAAehU,EAAciU,EAAMxQ,EAAW,CAC5C,IAAM7B,EAAS,KAAKqR,WAAWjT,EAAcyD,CAAAA,EACvC/D,EAAQuU,IAAU3e,OACpBsM,EAAO6R,QAAQQ,CACf,EAAA,GAEJ,OAAQvU,IAAU,GACdkC,EAAO3K,OAAS,EAChByI,CACN,CAKA8S,WAAY,CACV,IAAMrU,EAAO,KAAKlB,QACZsD,EAAO,KAAK+B,YACZ9B,EAASD,EAAKC,OACdkP,EAAS,CAAA,EACXxY,EAAGuI,EAEP,IAAKvI,EAAI,EAAGuI,EAAOc,EAAKD,KAAKrJ,OAAQC,EAAIuI,EAAM,EAAEvI,EAC/CwY,EAAOxX,KAAKsI,EAAOqO,iBAAiB,KAAKzF,UAAUlS,CAAE,EAACsJ,EAAOG,IAAI,EAAGzJ,CAAAA,CAAAA,EAGtE,IAAMkY,EAAejR,EAAKiR,aAG1B,MAAO,CACL/Y,IAHU+Y,GAAgBZ,GAAqBjO,CAAAA,EAI/CmP,OAAAA,EACApZ,MAAOkK,EAAO0T,YACd7V,IAAKmC,EAAO2T,UACZjF,WAAY,KAAKwE,eAAc,EAC/BzV,MAAOuC,EACPqR,QAAS1T,EAAK0T,QAEdxC,MAAOD,EAAe,EAAIjR,EAAKoR,mBAAqBpR,EAAKqR,aAC3D,CACF,CAMAmD,yBAAyBjT,EAAO,CAC9B,GAAM,CAAC4C,YAAa,CAAC7B,OAAAA,EAAQ2D,SAAAA,EAAU1E,MAAOM,CAAAA,EAAe/C,QAAS,CAAC6T,KAAMsD,EAAWC,aAAAA,CAAAA,CAAa,EAAI,KACnG3D,EAAa0D,GAAa,EAC1B/R,EAAS,KAAK+G,UAAU1J,CAAAA,EACxB8Q,EAASnO,EAAO+N,QAChBkE,EAAW/D,GAAWC,CAAAA,EACxB7S,EAAQ0E,EAAO5B,EAAOE,IAAI,EAC1BrK,EAAQ,EACRW,EAASmN,EAAW,KAAKzE,WAAWc,EAAQ4B,EAAQ+B,CAAAA,EAAYzG,EAChE+U,EAAM9U,EAEN3G,IAAW0G,IACbrH,EAAQW,EAAS0G,EACjB1G,EAAS0G,GAGP2W,IACF3W,EAAQ6S,EAAON,SACfjZ,EAASuZ,EAAOL,OAASK,EAAON,SAE5BvS,IAAU,GAAKyC,GAAKzC,CAAAA,IAAWyC,GAAKoQ,EAAOL,MAAM,IACnD7Z,EAAQ,GAEVA,GAASqH,GAGX,IAAMqS,EAAa,CAACV,GAAc8E,CAAAA,GAAc,CAACE,EAAWF,EAAY9d,EACpEwa,EAAOrQ,EAAOoO,iBAAiBmB,CAAAA,EAWnC,GATI,KAAKxa,MAAM+e,kBAAkB7U,CAAQ,EACvCgT,EAAOjS,EAAOoO,iBAAiBvY,EAAQW,CAAAA,EAGvCyb,EAAO5B,EAGTlT,EAAO8U,EAAO5B,EAEV1a,KAAKwY,IAAIhR,CAAAA,EAAQyW,EAAc,CACjCzW,EAAO6S,GAAQ7S,EAAM6C,EAAQiQ,CAAc2D,EAAAA,EACvC1W,IAAU+S,IACZI,GAAQlT,EAAO,GAEjB,IAAM4W,EAAa/T,EAAOgU,mBAAmB,CAAA,EACvCC,EAAWjU,EAAOgU,mBAAmB,CAAA,EACrCpe,EAAMD,KAAKC,IAAIme,EAAYE,CAAAA,EAC3Blc,EAAMpC,KAAKoC,IAAIgc,EAAYE,CAAAA,EACjC5D,EAAO1a,KAAKoC,IAAIpC,KAAKC,IAAIya,EAAMtY,CAAMnC,EAAAA,CAAAA,EACrCqc,EAAO5B,EAAOlT,EAEVwG,GAAY,CAACkQ,IAEfjS,EAAOE,QAAQ9B,EAAOE,IAAI,EAAEmC,cAAc9C,CAAa,EAAGS,EAAOkU,iBAAiBjC,CAAQjS,EAAAA,EAAOkU,iBAAiB7D,CAAAA,GAItH,GAAIA,IAASrQ,EAAOoO,iBAAiB6B,CAAa,EAAA,CAChD,IAAMkE,EAAWxU,GAAKxC,CAAAA,EAAQ6C,EAAOoU,qBAAqBnE,CAAc,EAAA,EACxEI,GAAQ8D,EACRhX,GAAQgX,EAGV,MAAO,CACLhX,KAAAA,EACAkT,KAAAA,EACA4B,KAAAA,EACAI,OAAQJ,EAAO9U,EAAO,CACxB,CACF,CAKAiV,yBAAyBnT,EAAOuP,EAAO,CACrC,IAAMhR,EAAQgR,EAAMhR,MACdhB,EAAU,KAAKA,QACfoW,EAAWpW,EAAQoW,SACnByB,EAAkB3O,GAAelJ,EAAQ6X,gBAAiBC,GAAAA,EAC5DjC,EAAQlV,EACNoX,EAAY,KAAKrB,cAAa,EACpC,GAAI1E,EAAM4C,QAAS,CACjB,IAAM3C,EAAamE,EAAW,KAAKK,eAAehU,CAAAA,EAASuP,EAAMC,WAC3D3F,EAAQtM,EAAQmS,eAAiB,OACnCO,GAA0BjQ,EAAOuP,EAAOhS,EAASiS,EAAa8F,CAAAA,EAC9DhG,GAAyBtP,EAAOuP,EAAOhS,EAASiS,EAAa8F,CAAU,EACrEC,EAAS,KAAKzf,MAAMyH,QAAQuJ,YAAc,IAAM,KAAKT,WAAU,EAAGG,QAAU,KAAKH,WAAU,EAAGM,QAC9F6O,EAAa,KAAKtB,SAAQ,EAAGH,QAAQtN,GAAe8O,EAAQ,KAAKpB,4BAA2B,CAAA,CAAA,EAC5FsB,EAAa,KAAKnB,eAAe,KAAKtU,MAAO,KAAK4C,YAAY1C,MAAOyT,EAAW3T,EAAQpK,MAAS,EAAI4f,EAC3GpC,EAASvJ,EAAMjT,MAASiT,EAAMkG,MAAQ0F,EAAe5L,EAAMkG,MAAQ,EACnE7R,EAAOxH,KAAKC,IAAIye,EAAiBvL,EAAMkG,MAAQlG,EAAM8F,KAAK,OAG1DyD,EAAS7U,EAAM4Q,iBAAiB,KAAKzF,UAAU1J,CAAAA,EAAOzB,EAAM0C,IAAI,EAAGjB,CAAAA,EACnE9B,EAAOxH,KAAKC,IAAIye,EAAiB7F,EAAM5Y,IAAM4Y,EAAMI,KAAK,EAI1D,MAAO,CACLyB,KAAMgC,EAASlV,EAAO,EACtB8U,KAAMI,EAASlV,EAAO,EACtBkV,OAAAA,EACAlV,KAAAA,CACF,CACF,CAEAzG,MAAO,CACL,IAAMoJ,EAAO,KAAK+B,YACZ7B,EAASF,EAAKE,OACd2U,EAAQ7U,EAAKD,KACbb,EAAO2V,EAAMne,OACfC,EAAI,EAER,KAAOA,EAAIuI,EAAM,EAAEvI,EACb,KAAKkS,UAAUlS,CAAE,EAACuJ,EAAOE,IAAI,IAAM,MAAQ,CAACyU,EAAMle,CAAE,EAACiN,QACvDiR,EAAMle,CAAE,EAACC,KAAK,KAAKqN,IAAI,CAG7B,CAEF,ECtqBqB6Q,GAAN,cAA+BhR,EAAAA,CAE5C,OAAOjD,GAAK,SAKZ,OAAO9E,SAAW,CAChBgI,mBAAoB,GACpBC,gBAAiB,QAEjBpH,WAAY,CACV2U,QAAS,CACPnc,KAAM,SACNkH,WAAY,CAAC,IAAK,IAAK,cAAe,QAAS,CACjD,CACF,GAMF,OAAOkV,UAAY,CACjB/O,OAAQ,CACNvE,EAAG,CACD9I,KAAM,QACR,EACA+I,EAAG,CACD/I,KAAM,QACR,CACF,GAGF4P,YAAa,CACX,KAAKJ,oBAAsB,GAC3B,MAAMI,WAAU,CAClB,CAMAqD,mBAAmBrI,EAAMD,EAAMhK,EAAOgS,EAAO,CAC3C,IAAMjG,EAAS,MAAMuG,mBAAmBrI,EAAMD,EAAMhK,EAAOgS,CAAAA,EAC3D,QAASpR,EAAI,EAAGA,EAAImL,EAAOpL,OAAQC,IACjCmL,EAAOnL,CAAE,EAACkZ,QAAU,KAAKxF,0BAA0B1T,EAAIZ,CAAAA,EAAOgf,OAEhE,OAAOjT,CACT,CAMAqG,eAAenI,EAAMD,EAAMhK,EAAOgS,EAAO,CACvC,IAAMjG,EAAS,MAAMqG,eAAenI,EAAMD,EAAMhK,EAAOgS,CAAAA,EACvD,QAASpR,EAAI,EAAGA,EAAImL,EAAOpL,OAAQC,IAAK,CACtC,IAAME,EAAOkJ,EAAKhK,EAAQY,CAAE,EAC5BmL,EAAOnL,CAAE,EAACkZ,QAAUjK,GAAe/O,EAAK,CAAE,EAAE,KAAKwT,0BAA0B1T,EAAIZ,CAAAA,EAAOgf,MAAM,CAC9F,CACA,OAAOjT,CACT,CAMAsG,gBAAgBpI,EAAMD,EAAMhK,EAAOgS,EAAO,CACxC,IAAMjG,EAAS,MAAMsG,gBAAgBpI,EAAMD,EAAMhK,EAAOgS,CAAAA,EACxD,QAASpR,EAAI,EAAGA,EAAImL,EAAOpL,OAAQC,IAAK,CACtC,IAAME,EAAOkJ,EAAKhK,EAAQY,CAAE,EAC5BmL,EAAOnL,CAAAA,EAAGkZ,QAAUjK,GAAe/O,GAAQA,EAAK6H,GAAK,CAAC7H,EAAK6H,EAAG,KAAK2L,0BAA0B1T,EAAIZ,CAAAA,EAAOgf,MAAM,CAChH,CACA,OAAOjT,CACT,CAKA2H,gBAAiB,CACf,IAAM1J,EAAO,KAAKgC,YAAYhC,KAE1B9H,EAAM,EACV,QAAStB,EAAIoJ,EAAKrJ,OAAS,EAAGC,GAAK,EAAG,EAAEA,EACtCsB,EAAMpC,KAAKoC,IAAIA,EAAK8H,EAAKpJ,CAAAA,EAAG0G,KAAK,KAAKgN,0BAA0B1T,CAAM,CAAA,EAAA,CAAA,EAExE,OAAOsB,EAAM,GAAKA,CACpB,CAKAyR,iBAAiBvK,EAAO,CACtB,IAAMa,EAAO,KAAK+B,YACZwG,EAAS,KAAKtT,MAAM8K,KAAKwI,QAAU,CAAA,EACnC,CAACvK,OAAAA,EAAQC,OAAAA,CAAAA,EAAU+B,EACnB8B,EAAS,KAAK+G,UAAU1J,CAAAA,EACxBjB,EAAIF,EAAO4L,iBAAiB9H,EAAO5D,CAAC,EACpCC,EAAIF,EAAO2L,iBAAiB9H,EAAO3D,CAAC,EACpCO,EAAIoD,EAAO+N,QAEjB,MAAO,CACLlG,MAAOpB,EAAOpJ,CAAAA,GAAU,GACxB/B,MAAO,IAAMc,EAAI,KAAOC,GAAKO,EAAI,KAAOA,EAAI,IAAM,GACpD,CACF,CAEA9D,OAAO4E,EAAM,CACX,IAAMwV,EAAS,KAAKjT,YAAYhC,KAGhC,KAAK6M,eAAeoI,EAAQ,EAAGA,EAAOte,OAAQ8I,CAAAA,CAChD,CAEAoN,eAAeoI,EAAQjf,EAAOgS,EAAOvI,EAAM,CACzC,IAAMoH,EAAQpH,IAAS,QACjB,CAACS,OAAAA,EAAQC,OAAAA,CAAAA,EAAU,KAAK6B,YACxB,CAACyJ,cAAAA,EAAeD,eAAAA,CAAc,EAAI,KAAKG,kBAAkB3V,EAAOyJ,CAAAA,EAChEyC,EAAQhC,EAAOG,KACf8B,EAAQhC,EAAOE,KAErB,QAASzJ,EAAIZ,EAAOY,EAAIZ,EAAQgS,EAAOpR,IAAK,CAC1C,IAAMse,EAAQD,EAAOre,CAAE,EACjBmL,EAAS,CAAC8E,GAAS,KAAKiC,UAAUlS,CAAAA,EAClC2F,EAAa,CAAA,EACb4Y,EAAS5Y,EAAW2F,CAAM,EAAG2E,EAAQ3G,EAAOiU,mBAAmB,EAAA,EAAOjU,EAAOqO,iBAAiBxM,EAAOG,CAAAA,CAAM,EAC3GkT,EAAS7Y,EAAW4F,CAAAA,EAAS0E,EAAQ1G,EAAO8R,aAAY,EAAK9R,EAAOoO,iBAAiBxM,EAAOI,CAAAA,CAAM,EAExG5F,EAAW8Y,KAAOnC,MAAMiC,CAAAA,GAAWjC,MAAMkC,CAAAA,EAErC5J,IACFjP,EAAWI,QAAU8O,GAAiB,KAAKnB,0BAA0B1T,EAAGse,EAAMta,OAAS,SAAW6E,CAAI,EAElGoH,IACFtK,EAAWI,QAAQqY,OAAS,IAIhC,KAAKjJ,cAAcmJ,EAAOte,EAAG2F,EAAYkD,CAAAA,CAC3C,CACF,CAOA6K,0BAA0BlL,EAAOK,EAAM,CACrC,IAAMsC,EAAS,KAAK+G,UAAU1J,CAAAA,EAC1B3C,EAAS,MAAM6N,0BAA0BlL,EAAOK,CAAAA,EAGhDhD,EAAOM,UACTN,EAASX,OAAOyB,OAAO,CAAA,EAAId,EAAQ,CAACM,QAAS,EAAK,CAAA,GAIpD,IAAMiY,EAASvY,EAAOuY,OACtB,OAAIvV,IAAS,WACXhD,EAAOuY,OAAS,GAElBvY,EAAOuY,QAAUnP,GAAe9D,GAAUA,EAAO+N,QAASkF,CAAAA,EAEnDvY,CACT,CACF,EC/JA,SAAS6Y,GAAkBC,EAAUC,EAAeC,EAAQ,CAC1D,IAAIC,EAAS,EACTC,EAAS,EACTC,EAAU,EACVC,EAAU,EAEd,GAAIL,EAAgBM,GAAK,CACvB,IAAMC,EAAaR,EACbS,EAAWD,EAAaP,EACxBS,EAASngB,KAAKogB,IAAIH,CAAAA,EAClBI,EAASrgB,KAAKsgB,IAAIL,CAAAA,EAClBM,EAAOvgB,KAAKogB,IAAIF,CAAAA,EAChBM,EAAOxgB,KAAKsgB,IAAIJ,CAAAA,EAChBO,EAAU,CAACC,EAAOvI,EAAGrP,IAAM6X,GAAcD,EAAOT,EAAYC,EAAU,EAAI,EAAI,EAAIlgB,KAAKoC,IAAI+V,EAAGA,EAAIwH,EAAQ7W,EAAGA,EAAI6W,CAAO,EACxHiB,EAAU,CAACF,EAAOvI,EAAGrP,IAAM6X,GAAcD,EAAOT,EAAYC,EAAU,EAAI,EAAI,GAAKlgB,KAAKC,IAAIkY,EAAGA,EAAIwH,EAAQ7W,EAAGA,EAAI6W,CAAO,EACzHkB,EAAOJ,EAAQ,EAAGN,EAAQI,CAAAA,EAC1BO,EAAOL,EAAQM,GAASV,EAAQG,CAAAA,EAChCQ,EAAOJ,EAAQK,GAAId,EAAQI,CAAAA,EAC3BW,EAAON,EAAQK,GAAKF,GAASV,EAAQG,CAAAA,EAC3CZ,GAAUiB,EAAOG,GAAQ,EACzBnB,GAAUiB,EAAOI,GAAQ,EACzBpB,EAAU,EAAEe,EAAOG,GAAQ,EAC3BjB,EAAU,EAAEe,EAAOI,GAAQ,EAE7B,MAAO,CAACtB,OAAAA,EAAQC,OAAAA,EAAQC,QAAAA,EAASC,QAAAA,CAAO,CAC1C,CAEe,IAAMoB,GAAN,cAAiClT,EAAAA,CAE9C,OAAOjD,GAAK,WAKZ,OAAO9E,SAAW,CAChBgI,mBAAoB,GACpBC,gBAAiB,MACjBhI,UAAW,CAETib,cAAe,GAEfC,aAAc,EAChB,EACAta,WAAY,CACV2U,QAAS,CACPnc,KAAM,SACNkH,WAAY,CAAC,gBAAiB,WAAY,cAAe,cAAe,aAAc,IAAK,IAAK,SAAU,cAAe,SAAU,CACrI,CACF,EAEAkZ,OAAQ,MAGRF,SAAU,EAGVC,cAAe,IAGfR,OAAQ,OAGRoC,QAAS,EAETlR,UAAW,KAGb,OAAOmR,YAAc,CACnBC,YAAc3D,GAASA,IAAS,UAChC4D,WAAa5D,GAASA,IAAS,WAAa,CAACA,EAAK6D,WAAW,YAAiB,GAAA,CAAC7D,EAAK6D,WAAW,iBAAA,GAMjG,OAAO/F,UAAY,CACjBgG,YAAa,EAGbC,QAAS,CACPC,OAAQ,CACNnP,OAAQ,CACNoP,eAAe1iB,EAAO,CACpB,IAAM8K,EAAO9K,EAAM8K,KACnB,GAAIA,EAAKwI,OAAO7R,QAAUqJ,EAAKyG,SAAS9P,OAAQ,CAC9C,GAAM,CAAC6R,OAAQ,CAACqP,WAAAA,EAAY9e,MAAAA,CAAAA,CAAM,EAAI7D,EAAMyiB,OAAOhb,QAEnD,OAAOqD,EAAKwI,OAAOsP,IAAI,CAAClO,EAAOhT,IAAM,CAEnC,IAAMmhB,EADO7iB,EAAMwR,eAAe,CAAA,EACf5E,WAAWsI,SAASxT,CAAAA,EAEvC,MAAO,CACLohB,KAAMpO,EACNqO,UAAWF,EAAMG,gBACjBC,YAAaJ,EAAMK,YACnBC,UAAWtf,EACXuf,UAAWP,EAAMQ,YACjBV,WAAYA,EACZhU,OAAQ,CAAC3O,EAAM+e,kBAAkBrd,CAAAA,EAGjCwI,MAAOxI,CACT,CACF,CAAA,EAEF,MAAO,CAAA,CACT,CACF,EAEA4hB,QAAQC,EAAGC,EAAYf,EAAQ,CAC7BA,EAAOziB,MAAMyjB,qBAAqBD,EAAWtZ,KAAK,EAClDuY,EAAOziB,MAAM2F,OAAM,CACrB,CACF,CACF,GAGFnG,YAAYQ,EAAOwK,EAAc,CAC/B,MAAMxK,EAAOwK,CAAAA,EAEb,KAAKmF,oBAAsB,GAC3B,KAAK+T,YAAc5jB,OACnB,KAAK6jB,YAAc7jB,OACnB,KAAK4gB,QAAU5gB,OACf,KAAK6gB,QAAU7gB,MACjB,CAEAkQ,YAAa,CAAA,CAKb6C,MAAM/R,EAAOgS,EAAO,CAClB,IAAMhI,EAAO,KAAKyF,WAAU,EAAGzF,KACzBC,EAAO,KAAK+B,YAElB,GAAI,KAAKuC,WAAa,GACpBtE,EAAKqD,QAAUtD,MACV,CACL,IAAI8Y,EAAUliB,GAAM,CAACoJ,EAAKpJ,CAAE,EAE5B,GAAIgF,GAASoE,EAAKhK,CAAAA,CAAM,EAAG,CACzB,GAAM,CAACoG,IAAAA,EAAM,OAAA,EAAW,KAAKmI,SAC7BuU,EAAUliB,GAAM,CAACiS,GAAiB7I,EAAKpJ,CAAAA,EAAIwF,CAAAA,EAG7C,IAAIxF,EAAGuI,EACP,IAAKvI,EAAIZ,EAAOmJ,EAAOnJ,EAAQgS,EAAOpR,EAAIuI,EAAM,EAAEvI,EAChDqJ,EAAKqD,QAAQ1M,CAAE,EAAGkiB,EAAOliB,CAAAA,EAG/B,CAKAmiB,cAAe,CACb,OAAOC,GAAU,KAAKrc,QAAQ4Y,SAAW,EAAA,CAC3C,CAKA0D,mBAAoB,CAClB,OAAOD,GAAU,KAAKrc,QAAQ6Y,aAAa,CAC7C,CAMA0D,qBAAsB,CACpB,IAAInjB,EAAM+f,GACN5d,EAAM,CAAC4d,GAEX,QAASlf,EAAI,EAAGA,EAAI,KAAK1B,MAAM8K,KAAKyG,SAAS9P,OAAQ,EAAEC,EACrD,GAAI,KAAK1B,MAAMikB,iBAAiBviB,CAAAA,GAAM,KAAK1B,MAAMwR,eAAe9P,CAAGvB,EAAAA,OAAS,KAAKiP,MAAO,CACtF,IAAMxC,EAAa,KAAK5M,MAAMwR,eAAe9P,CAAAA,EAAGkL,WAC1CyT,EAAWzT,EAAWiX,aAAY,EAClCvD,EAAgB1T,EAAWmX,kBAAiB,EAElDljB,EAAMD,KAAKC,IAAIA,EAAKwf,CAAAA,EACpBrd,EAAMpC,KAAKoC,IAAIA,EAAKqd,EAAWC,CAAAA,EAInC,MAAO,CACLD,SAAUxf,EACVyf,cAAetd,EAAMnC,CACvB,CACF,CAKA8E,OAAO4E,EAAM,CACX,IAAMvK,EAAQ,KAAKA,MACb,CAACgV,UAAAA,CAAS,EAAIhV,EACd+K,EAAO,KAAK+B,YACZoX,EAAOnZ,EAAKD,KACZoX,EAAU,KAAKiC,kBAAiB,EAAK,KAAKC,aAAaF,CAAQ,EAAA,KAAKzc,QAAQya,QAC5EmC,EAAUzjB,KAAKoC,KAAKpC,KAAKC,IAAImU,EAAUwI,MAAOxI,EAAUuI,MAAM,EAAI2E,GAAW,EAAG,CAAA,EAChF3B,EAAS3f,KAAKC,IAAIyjB,GAAa,KAAK7c,QAAQ8Y,OAAQ8D,CAAU,EAAA,CAAA,EAC9DE,EAAc,KAAKC,eAAe,KAAKta,KAAK,EAK5C,CAACoW,cAAAA,EAAeD,SAAAA,CAAAA,EAAY,KAAK2D,oBAAmB,EACpD,CAACxD,OAAAA,EAAQC,OAAAA,EAAQC,QAAAA,EAASC,QAAAA,CAAAA,EAAWP,GAAkBC,EAAUC,EAAeC,CAAAA,EAChFkE,GAAYzP,EAAUwI,MAAQ0E,GAAW1B,EACzCkE,GAAa1P,EAAUuI,OAAS2E,GAAWzB,EAC3CkE,EAAY/jB,KAAKoC,IAAIpC,KAAKC,IAAI4jB,EAAUC,CAAAA,EAAa,EAAG,CAAA,EACxDf,EAAciB,GAAY,KAAKnd,QAAQqY,OAAQ6E,CAAAA,EAC/CjB,EAAc9iB,KAAKoC,IAAI2gB,EAAcpD,EAAQ,CAAA,EAC7CsE,GAAgBlB,EAAcD,GAAe,KAAKoB,8BAA6B,EACrF,KAAKpE,QAAUA,EAAUiD,EACzB,KAAKhD,QAAUA,EAAUgD,EAEzB5Y,EAAKga,MAAQ,KAAKC,eAAc,EAEhC,KAAKrB,YAAcA,EAAckB,EAAe,KAAKI,qBAAqB,KAAK/a,KAAK,EACpF,KAAKwZ,YAAc9iB,KAAKoC,IAAI,KAAK2gB,YAAckB,EAAeN,EAAa,CAAA,EAE3E,KAAK5M,eAAeuM,EAAM,EAAGA,EAAKziB,OAAQ8I,CAAAA,CAC5C,CAKA2a,eAAexjB,EAAGiQ,EAAO,CACvB,IAAMhJ,EAAO,KAAKlB,QACZsD,EAAO,KAAK+B,YACZwT,EAAgB,KAAKyD,kBAAiB,EAC5C,OAAIpS,GAAUhJ,EAAK5B,UAAUib,eAAkB,CAAC,KAAKhiB,MAAM+e,kBAAkBrd,CAAMqJ,GAAAA,EAAKqD,QAAQ1M,CAAE,IAAK,MAAQqJ,EAAKD,KAAKpJ,CAAAA,EAAGiN,OACnH,EAEF,KAAKwW,uBAAuBpa,EAAKqD,QAAQ1M,CAAE,EAAG4e,EAAgBM,EAAAA,CACvE,CAEAjJ,eAAeuM,EAAMpjB,EAAOgS,EAAOvI,EAAM,CACvC,IAAMoH,EAAQpH,IAAS,QACjBvK,EAAQ,KAAKA,MACbgV,EAAYhV,EAAMgV,UAElBoQ,EADOplB,EAAMyH,QACQV,UACrBse,GAAWrQ,EAAU1L,KAAO0L,EAAU5L,OAAS,EAC/Ckc,GAAWtQ,EAAU7L,IAAM6L,EAAU3L,QAAU,EAC/C4Y,EAAetQ,GAASyT,EAAcnD,aACtCyB,EAAczB,EAAe,EAAI,KAAKyB,YACtCC,EAAc1B,EAAe,EAAI,KAAK0B,YACtC,CAACpN,cAAAA,EAAeD,eAAAA,CAAc,EAAI,KAAKG,kBAAkB3V,EAAOyJ,CAAAA,EAClEsW,EAAa,KAAKgD,aAAY,EAC9BniB,EAEJ,IAAKA,EAAI,EAAGA,EAAIZ,EAAO,EAAEY,EACvBmf,GAAc,KAAKqE,eAAexjB,EAAGiQ,CAAAA,EAGvC,IAAKjQ,EAAIZ,EAAOY,EAAIZ,EAAQgS,EAAO,EAAEpR,EAAG,CACtC,IAAM4e,EAAgB,KAAK4E,eAAexjB,EAAGiQ,CAAAA,EACvC4T,EAAMrB,EAAKxiB,CAAE,EACb2F,EAAa,CACjB4B,EAAGoc,EAAU,KAAK3E,QAClBxX,EAAGoc,EAAU,KAAK3E,QAClBE,WAAAA,EACAC,SAAUD,EAAaP,EACvBA,cAAAA,EACAqD,YAAAA,EACAD,YAAAA,CACF,EACIpN,IACFjP,EAAWI,QAAU8O,GAAiB,KAAKnB,0BAA0B1T,EAAG6jB,EAAI7f,OAAS,SAAW6E,CAAI,GAEtGsW,GAAcP,EAEd,KAAKzJ,cAAc0O,EAAK7jB,EAAG2F,EAAYkD,CAAAA,CACzC,CACF,CAEAya,gBAAiB,CACf,IAAMja,EAAO,KAAK+B,YACZ0Y,EAAWza,EAAKD,KAClBia,EAAQ,EACRrjB,EAEJ,IAAKA,EAAI,EAAGA,EAAI8jB,EAAS/jB,OAAQC,IAAK,CACpC,IAAMyG,EAAQ4C,EAAKqD,QAAQ1M,CAAE,EACzByG,IAAU,MAAQ,CAAC6V,MAAM7V,CAAAA,GAAU,KAAKnI,MAAM+e,kBAAkBrd,CAAAA,GAAM,CAAC8jB,EAAS9jB,CAAE,EAACiN,SACrFoW,GAASnkB,KAAKwY,IAAIjR,CAAAA,EAEtB,CAEA,OAAO4c,CACT,CAEAI,uBAAuBhd,EAAO,CAC5B,IAAM4c,EAAQ,KAAKjY,YAAYiY,MAC/B,OAAIA,EAAQ,GAAK,CAAC/G,MAAM7V,CAAQ,EACvByY,IAAOhgB,KAAKwY,IAAIjR,CAAAA,EAAS4c,GAE3B,CACT,CAEAtQ,iBAAiBvK,EAAO,CACtB,IAAMa,EAAO,KAAK+B,YACZ9M,EAAQ,KAAKA,MACbsT,EAAStT,EAAM8K,KAAKwI,QAAU,CAAA,EAC9BnL,EAAQsd,GAAa1a,EAAKqD,QAAQlE,CAAAA,EAAQlK,EAAMyH,QAAQie,MAAM,EAEpE,MAAO,CACLhR,MAAOpB,EAAOpJ,CAAAA,GAAU,GACxB/B,MAAAA,CACF,CACF,CAEAgc,kBAAkBD,EAAM,CACtB,IAAIlhB,EAAM,EACJhD,EAAQ,KAAKA,MACf0B,EAAGuI,EAAMc,EAAM6B,EAAYnF,EAE/B,GAAI,CAACyc,GAEH,IAAKxiB,EAAI,EAAGuI,EAAOjK,EAAM8K,KAAKyG,SAAS9P,OAAQC,EAAIuI,EAAM,EAAEvI,EACzD,GAAI1B,EAAMikB,iBAAiBviB,CAAI,EAAA,CAC7BqJ,EAAO/K,EAAMwR,eAAe9P,CAAAA,EAC5BwiB,EAAOnZ,EAAKD,KACZ8B,EAAa7B,EAAK6B,WAClB,OAKN,GAAI,CAACsX,EACH,MAAO,GAGT,IAAKxiB,EAAI,EAAGuI,EAAOia,EAAKziB,OAAQC,EAAIuI,EAAM,EAAEvI,EAC1C+F,EAAUmF,EAAWwI,0BAA0B1T,CAAAA,EAC3C+F,EAAQke,cAAgB,UAC1B3iB,EAAMpC,KAAKoC,IAAIA,EAAKyE,EAAQ4b,aAAe,EAAG5b,EAAQme,kBAAoB,CAAA,GAG9E,OAAO5iB,CACT,CAEAohB,aAAaF,EAAM,CACjB,IAAIlhB,EAAM,EAEV,QAAStB,EAAI,EAAGuI,EAAOia,EAAKziB,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CACjD,IAAM+F,EAAU,KAAK2N,0BAA0B1T,CAAAA,EAC/CsB,EAAMpC,KAAKoC,IAAIA,EAAKyE,EAAQgV,QAAU,EAAGhV,EAAQoe,aAAe,CAAA,CAClE,CACA,OAAO7iB,CACT,CAMAiiB,qBAAqBza,EAAc,CACjC,IAAIsb,EAAmB,EAEvB,QAASpkB,EAAI,EAAGA,EAAI8I,EAAc,EAAE9I,EAC9B,KAAK1B,MAAMikB,iBAAiBviB,CAAI,IAClCokB,GAAoB,KAAKtB,eAAe9iB,CAAAA,GAI5C,OAAOokB,CACT,CAKAtB,eAAeha,EAAc,CAC3B,OAAO5J,KAAKoC,IAAI2N,GAAe,KAAK3Q,MAAM8K,KAAKyG,SAAS/G,CAAAA,EAAcub,OAAQ,CAAI,EAAA,CAAA,CACpF,CAMAjB,+BAAgC,CAC9B,OAAO,KAAKG,qBAAqB,KAAKjlB,MAAM8K,KAAKyG,SAAS9P,MAAM,GAAK,CACvE,CACF,ECtYqBukB,GAAN,cAA6BnX,EAAAA,CAE1C,OAAOjD,GAAK,OAKZ,OAAO9E,SAAW,CAChBgI,mBAAoB,OACpBC,gBAAiB,QAEjBkX,SAAU,GACVC,SAAU,IAMZ,OAAO3J,UAAY,CACjB/O,OAAQ,CACNgP,QAAS,CACPrc,KAAM,UACR,EACAwc,QAAS,CACPxc,KAAM,QACR,CACF,GAGF4P,YAAa,CACX,KAAKJ,oBAAsB,GAC3B,KAAKC,mBAAqB,GAC1B,MAAMG,WAAU,CAClB,CAEApK,OAAO4E,EAAM,CACX,IAAMQ,EAAO,KAAK+B,YACZ,CAACgB,QAASqY,EAAMrb,KAAMiV,EAAS,CAAA,EAAIqG,SAAAA,CAAQ,EAAIrb,EAE/Csb,EAAqB,KAAKrmB,MAAMwW,oBAClC,CAAC1V,MAAAA,EAAOgS,MAAAA,CAAAA,EAASwT,GAAiCvb,EAAMgV,EAAQsG,CAAAA,EAEpE,KAAK5W,WAAa3O,EAClB,KAAK4O,WAAaoD,EAEdyT,GAAoBxb,CAAO,IAC7BjK,EAAQ,EACRgS,EAAQiN,EAAOte,QAIjB0kB,EAAK5f,OAAS,KAAKvG,MACnBmmB,EAAKK,cAAgB,KAAKtc,MAC1Bic,EAAKM,WAAa,CAAC,CAACL,EAASK,WAC7BN,EAAKpG,OAASA,EAEd,IAAMtY,EAAU,KAAK0N,6BAA6B5K,CAAAA,EAC7C,KAAK9C,QAAQwe,WAChBxe,EAAQ4b,YAAc,GAExB5b,EAAQif,QAAU,KAAKjf,QAAQif,QAC/B,KAAK7P,cAAcsP,EAAMrmB,OAAW,CAClC6mB,SAAU,CAACN,EACX5e,QAAAA,GACC8C,CAAAA,EAGH,KAAKoN,eAAeoI,EAAQjf,EAAOgS,EAAOvI,CAAAA,CAC5C,CAEAoN,eAAeoI,EAAQjf,EAAOgS,EAAOvI,EAAM,CACzC,IAAMoH,EAAQpH,IAAS,QACjB,CAACS,OAAAA,EAAQC,OAAAA,EAAQ2D,SAAAA,EAAUwX,SAAAA,CAAAA,EAAY,KAAKtZ,YAC5C,CAACyJ,cAAAA,EAAeD,eAAAA,CAAc,EAAI,KAAKG,kBAAkB3V,EAAOyJ,CAAAA,EAChEyC,EAAQhC,EAAOG,KACf8B,EAAQhC,EAAOE,KACf,CAAC+a,SAAAA,EAAUQ,QAAAA,CAAAA,EAAW,KAAKjf,QAC3Bmf,EAAeC,GAASX,CAAYA,EAAAA,EAAWla,OAAOE,kBACtD4a,EAAe,KAAK9mB,MAAMwW,qBAAuB7E,GAASpH,IAAS,OACnE1B,EAAM/H,EAAQgS,EACdiU,EAAchH,EAAOte,OACvBulB,EAAalmB,EAAQ,GAAK,KAAK8S,UAAU9S,EAAQ,CAAA,EAErD,QAASY,EAAI,EAAGA,EAAIqlB,EAAa,EAAErlB,EAAG,CACpC,IAAMse,EAAQD,EAAOre,CAAE,EACjB2F,EAAayf,EAAe9G,EAAQ,CAAA,EAE1C,GAAIte,EAAIZ,GAASY,GAAKmH,EAAK,CACzBxB,EAAW8Y,KAAO,GAClB,SAGF,IAAMtT,EAAS,KAAK+G,UAAUlS,CAAAA,EACxBulB,EAAWnN,GAAcjN,EAAOI,CAAM,CAAA,EACtCgT,EAAS5Y,EAAW2F,CAAM,EAAGhC,EAAOqO,iBAAiBxM,EAAOG,CAAAA,EAAQtL,CAAAA,EACpEwe,EAAS7Y,EAAW4F,CAAM,EAAG0E,GAASsV,EAAWhc,EAAO8R,aAAY,EAAK9R,EAAOoO,iBAAiBzK,EAAW,KAAKzE,WAAWc,EAAQ4B,EAAQ+B,CAAAA,EAAY/B,EAAOI,CAAM,EAAEvL,CAAE,EAE/K2F,EAAW8Y,KAAOnC,MAAMiC,CAAAA,GAAWjC,MAAMkC,CAAW+G,GAAAA,EACpD5f,EAAWnE,KAAOxB,EAAI,GAAK,KAAM0X,IAAIvM,EAAOG,CAAM,EAAGga,EAAWha,CAAAA,CAAM,EAAK4Z,EACvEF,IACFrf,EAAWwF,OAASA,EACpBxF,EAAW6G,IAAMkY,EAAStb,KAAKpJ,CAAE,GAG/B4U,IACFjP,EAAWI,QAAU8O,GAAiB,KAAKnB,0BAA0B1T,EAAGse,EAAMta,OAAS,SAAW6E,CAAI,GAGnGuc,GACH,KAAKjQ,cAAcmJ,EAAOte,EAAG2F,EAAYkD,CAAAA,EAG3Cyc,EAAana,CACf,CACF,CAKA2H,gBAAiB,CACf,IAAMzJ,EAAO,KAAK+B,YACZgB,EAAU/C,EAAK+C,QACfoZ,EAASpZ,EAAQrG,SAAWqG,EAAQrG,QAAQ4b,aAAe,EAC3DvY,EAAOC,EAAKD,MAAQ,CAAA,EAC1B,GAAI,CAACA,EAAKrJ,OACR,OAAOylB,EAET,IAAMC,EAAarc,EAAK,CAAE,EAAC1C,KAAK,KAAKgN,0BAA0B,CAAA,CAAA,EACzDgS,EAAYtc,EAAKA,EAAKrJ,OAAS,CAAE,EAAC2G,KAAK,KAAKgN,0BAA0BtK,EAAKrJ,OAAS,CAAA,CAAA,EAC1F,OAAOb,KAAKoC,IAAIkkB,EAAQC,EAAYC,CAAa,EAAA,CACnD,CAEAzlB,MAAO,CACL,IAAMoJ,EAAO,KAAK+B,YAClB/B,EAAK+C,QAAQuZ,oBAAoB,KAAKrnB,MAAMgV,UAAWjK,EAAKC,OAAOG,IAAI,EACvE,MAAMxJ,KAAI,CACZ,CACF,EC3IqB2lB,GAAN,cAAkCzY,EAAAA,CAE/C,OAAOjD,GAAK,YAKZ,OAAO9E,SAAW,CAChBiI,gBAAiB,MACjBhI,UAAW,CACTib,cAAe,GACfC,aAAc,EAChB,EACAta,WAAY,CACV2U,QAAS,CACPnc,KAAM,SACNkH,WAAY,CAAC,IAAK,IAAK,aAAc,WAAY,cAAe,aAAc,CAChF,CACF,EACA2J,UAAW,IACX6P,WAAY,GAMd,OAAOtE,UAAY,CACjBgG,YAAa,EAEbC,QAAS,CACPC,OAAQ,CACNnP,OAAQ,CACNoP,eAAe1iB,EAAO,CACpB,IAAM8K,EAAO9K,EAAM8K,KACnB,GAAIA,EAAKwI,OAAO7R,QAAUqJ,EAAKyG,SAAS9P,OAAQ,CAC9C,GAAM,CAAC6R,OAAQ,CAACqP,WAAAA,EAAY9e,MAAAA,CAAAA,CAAM,EAAI7D,EAAMyiB,OAAOhb,QAEnD,OAAOqD,EAAKwI,OAAOsP,IAAI,CAAClO,EAAOhT,IAAM,CAEnC,IAAMmhB,EADO7iB,EAAMwR,eAAe,CAAA,EACf5E,WAAWsI,SAASxT,CAAAA,EAEvC,MAAO,CACLohB,KAAMpO,EACNqO,UAAWF,EAAMG,gBACjBC,YAAaJ,EAAMK,YACnBC,UAAWtf,EACXuf,UAAWP,EAAMQ,YACjBV,WAAYA,EACZhU,OAAQ,CAAC3O,EAAM+e,kBAAkBrd,CAAAA,EAGjCwI,MAAOxI,CACT,CACF,CAAA,EAEF,MAAO,CAAA,CACT,CACF,EAEA4hB,QAAQC,EAAGC,EAAYf,EAAQ,CAC7BA,EAAOziB,MAAMyjB,qBAAqBD,EAAWtZ,KAAK,EAClDuY,EAAOziB,MAAM2F,OAAM,CACrB,CACF,CACF,EAEA6H,OAAQ,CACN/D,EAAG,CACDtJ,KAAM,eACNonB,WAAY,CACVC,QAAS,EACX,EACA5K,YAAa,GACbF,KAAM,CACJ+K,SAAU,EACZ,EACAC,YAAa,CACXF,QAAS,EACX,EACA3G,WAAY,CACd,CACF,GAGFrhB,YAAYQ,EAAOwK,EAAc,CAC/B,MAAMxK,EAAOwK,CAAAA,EAEb,KAAKkZ,YAAc5jB,OACnB,KAAK6jB,YAAc7jB,MACrB,CAEA2U,iBAAiBvK,EAAO,CACtB,IAAMa,EAAO,KAAK+B,YACZ9M,EAAQ,KAAKA,MACbsT,EAAStT,EAAM8K,KAAKwI,QAAU,CAAA,EAC9BnL,EAAQsd,GAAa1a,EAAKqD,QAAQlE,CAAAA,EAAOT,EAAGzJ,EAAMyH,QAAQie,MAAM,EAEtE,MAAO,CACLhR,MAAOpB,EAAOpJ,CAAAA,GAAU,GACxB/B,MAAAA,CACF,CACF,CAEAgL,gBAAgBpI,EAAMD,EAAMhK,EAAOgS,EAAO,CACxC,OAAO6U,GAA4BC,KAAK,IAAI,EAAE7c,EAAMD,EAAMhK,EAAOgS,CAAAA,CACnE,CAEAnN,OAAO4E,EAAM,CACX,IAAM2Z,EAAO,KAAKpX,YAAYhC,KAE9B,KAAK+c,cAAa,EAClB,KAAKlQ,eAAeuM,EAAM,EAAGA,EAAKziB,OAAQ8I,CAAAA,CAC5C,CAKA2J,WAAY,CACV,IAAMnJ,EAAO,KAAK+B,YACZiH,EAAQ,CAAClT,IAAKmL,OAAOE,kBAAmBlJ,IAAKgJ,OAAOC,iBAAiB,EAE3ElB,OAAAA,EAAKD,KAAKtK,QAAQ,CAACwN,EAAS9D,IAAU,CACpC,IAAM2C,EAAS,KAAK+G,UAAU1J,CAAAA,EAAOT,EAEjC,CAACuU,MAAMnR,CAAW,GAAA,KAAK7M,MAAM+e,kBAAkB7U,CAAQ,IACrD2C,EAASkH,EAAMlT,MACjBkT,EAAMlT,IAAMgM,GAGVA,EAASkH,EAAM/Q,MACjB+Q,EAAM/Q,IAAM6J,GAGlB,CAAA,EAEOkH,CACT,CAKA8T,eAAgB,CACd,IAAM7nB,EAAQ,KAAKA,MACbgV,EAAYhV,EAAMgV,UAClBrM,EAAO3I,EAAMyH,QACbqgB,EAAUlnB,KAAKC,IAAImU,EAAU5L,MAAQ4L,EAAU1L,KAAM0L,EAAU3L,OAAS2L,EAAU7L,GAAG,EAErFwa,EAAc/iB,KAAKoC,IAAI8kB,EAAU,EAAG,CAAA,EACpCpE,EAAc9iB,KAAKoC,IAAI2F,EAAKof,iBAAmBpE,EAAe,IAAQhb,EAAKof,iBAAoB,EAAG,CAAA,EAClGlD,GAAgBlB,EAAcD,GAAe1jB,EAAMgoB,uBAAsB,EAE/E,KAAKrE,YAAcA,EAAekB,EAAe,KAAK3a,MACtD,KAAKwZ,YAAc,KAAKC,YAAckB,CACxC,CAEAlN,eAAeuM,EAAMpjB,EAAOgS,EAAOvI,EAAM,CACvC,IAAMoH,EAAQpH,IAAS,QACjBvK,EAAQ,KAAKA,MAEbolB,EADOplB,EAAMyH,QACQV,UACrB0B,EAAQ,KAAKqE,YAAYwE,OACzB+T,EAAU5c,EAAMwf,QAChB3C,EAAU7c,EAAMyf,QAChBC,EAAoB1f,EAAM2f,cAAc,CAAA,EAAK,GAAMvG,GACrDP,EAAQ6G,EACRzmB,EAEE2mB,EAAe,IAAM,KAAKC,qBAAoB,EAEpD,IAAK5mB,EAAI,EAAGA,EAAIZ,EAAO,EAAEY,EACvB4f,GAAS,KAAKiH,cAAc7mB,EAAG6I,EAAM8d,CAAAA,EAEvC,IAAK3mB,EAAIZ,EAAOY,EAAIZ,EAAQgS,EAAOpR,IAAK,CACtC,IAAM6jB,EAAMrB,EAAKxiB,CAAE,EACfmf,EAAaS,EACbR,EAAWQ,EAAQ,KAAKiH,cAAc7mB,EAAG6I,EAAM8d,CAAAA,EAC/C1E,EAAc3jB,EAAM+e,kBAAkBrd,CAAAA,EAAK+G,EAAM+f,8BAA8B,KAAK5U,UAAUlS,CAAG+H,EAAAA,CAAC,EAAI,EAC1G6X,EAAQR,EAEJnP,IACEyT,EAAcnD,eAChB0B,EAAc,GAEZyB,EAAcpD,gBAChBnB,EAAaC,EAAWqH,IAI5B,IAAM9gB,EAAa,CACjB4B,EAAGoc,EACHnc,EAAGoc,EACH5B,YAAa,EACbC,YAAAA,EACA9C,WAAAA,EACAC,SAAAA,EACArZ,QAAS,KAAK2N,0BAA0B1T,EAAG6jB,EAAI7f,OAAS,SAAW6E,CAAI,CACzE,EAEA,KAAKsM,cAAc0O,EAAK7jB,EAAG2F,EAAYkD,CAAAA,CACzC,CACF,CAEA+d,sBAAuB,CACrB,IAAMvd,EAAO,KAAK+B,YACdgG,EAAQ,EAEZ/H,OAAAA,EAAKD,KAAKtK,QAAQ,CAACwN,EAAS9D,IAAU,CAChC,CAAC8T,MAAM,KAAKpK,UAAU1J,CAAAA,EAAOT,CAAC,GAAK,KAAKzJ,MAAM+e,kBAAkB7U,CAAQ,GAC1E4I,GAEJ,CAAA,EAEOA,CACT,CAKAyV,cAAcre,EAAOK,EAAM8d,EAAc,CACvC,OAAO,KAAKroB,MAAM+e,kBAAkB7U,CAChC4Z,EAAAA,GAAU,KAAK1O,0BAA0BlL,EAAOK,CAAAA,EAAM+W,OAAS+G,CAAAA,EAC/D,CACN,CACF,EC/NqBI,GAAN,cAA4B1G,EAAAA,CAEzC,OAAOnW,GAAK,MAKZ,OAAO9E,SAAW,CAEhByZ,OAAQ,EAGRF,SAAU,EAGVC,cAAe,IAGfR,OAAQ,OAEZ,ECpBqB4I,GAAN,cAA8B7Z,EAAAA,CAE3C,OAAOjD,GAAK,QAKZ,OAAO9E,SAAW,CAChBgI,mBAAoB,OACpBC,gBAAiB,QACjBiC,UAAW,IACXiV,SAAU,GACVnR,SAAU,CACRqR,KAAM,CACJjW,KAAM,OACR,CACF,GAMF,OAAOqM,UAAY,CACjBgG,YAAa,EAEb/U,OAAQ,CACN/D,EAAG,CACDtJ,KAAM,cACR,CACF,GAMFsU,iBAAiBvK,EAAO,CACtB,IAAMe,EAAS,KAAK6B,YAAY7B,OAC1B4B,EAAS,KAAK+G,UAAU1J,CAAAA,EAE9B,MAAO,CACLwK,MAAOzJ,EAAOsI,UAAS,EAAGrJ,CAAM,EAChC/B,MAAO,GAAK8C,EAAO0J,iBAAiB9H,EAAO5B,EAAOE,IAAI,CAAC,CACzD,CACF,CAEAgI,gBAAgBpI,EAAMD,EAAMhK,EAAOgS,EAAO,CACxC,OAAO6U,GAA4BC,KAAK,IAAI,EAAE7c,EAAMD,EAAMhK,EAAOgS,CAAAA,CACnE,CAEAnN,OAAO4E,EAAM,CACX,IAAMQ,EAAO,KAAK+B,YACZqZ,EAAOpb,EAAK+C,QACZiS,EAAShV,EAAKD,MAAQ,CAAA,EACtBwI,EAASvI,EAAKC,OAAOuI,UAAS,EAKpC,GAFA4S,EAAKpG,OAASA,EAEVxV,IAAS,SAAU,CACrB,IAAM9C,EAAU,KAAK0N,6BAA6B5K,CAAAA,EAC7C,KAAK9C,QAAQwe,WAChBxe,EAAQ4b,YAAc,GAGxB,IAAMhc,EAAa,CACjBlC,MAAO,GACPwjB,UAAWrV,EAAO7R,SAAWse,EAAOte,OACpCgG,QAAAA,CACF,EAEA,KAAKoP,cAAcsP,EAAMrmB,OAAWuH,EAAYkD,CAAAA,EAIlD,KAAKoN,eAAeoI,EAAQ,EAAGA,EAAOte,OAAQ8I,CAAAA,CAChD,CAEAoN,eAAeoI,EAAQjf,EAAOgS,EAAOvI,EAAM,CACzC,IAAM9B,EAAQ,KAAKqE,YAAYwE,OACzBK,EAAQpH,IAAS,QAEvB,QAAS7I,EAAIZ,EAAOY,EAAIZ,EAAQgS,EAAOpR,IAAK,CAC1C,IAAMse,EAAQD,EAAOre,CAAE,EACjB+F,EAAU,KAAK2N,0BAA0B1T,EAAGse,EAAMta,OAAS,SAAW6E,CAAI,EAC1Eqe,EAAgBngB,EAAMogB,yBAAyBnnB,EAAG,KAAKkS,UAAUlS,CAAAA,EAAG+H,CAAC,EAErER,EAAI0I,EAAQlJ,EAAMwf,QAAUW,EAAc3f,EAC1CC,EAAIyI,EAAQlJ,EAAMyf,QAAUU,EAAc1f,EAE1C7B,EAAa,CACjB4B,EAAAA,EACAC,EAAAA,EACAoY,MAAOsH,EAActH,MACrBnB,KAAMnC,MAAM/U,CAAAA,GAAM+U,MAAM9U,CAAAA,EACxBzB,QAAAA,CACF,EAEA,KAAKoP,cAAcmJ,EAAOte,EAAG2F,EAAYkD,CAAAA,CAC3C,CACF,CACF,EClGqBue,GAAN,cAAgCja,EAAAA,CAE7C,OAAOjD,GAAK,UAKZ,OAAO9E,SAAW,CAChBgI,mBAAoB,GACpBC,gBAAiB,QACjBkX,SAAU,GACV/V,KAAM,IAMR,OAAOqM,UAAY,CAEjBwM,YAAa,CACXxe,KAAM,OACR,EAEAiD,OAAQ,CACNvE,EAAG,CACD9I,KAAM,QACR,EACA+I,EAAG,CACD/I,KAAM,QACR,CACF,GAMFsU,iBAAiBvK,EAAO,CACtB,IAAMa,EAAO,KAAK+B,YACZwG,EAAS,KAAKtT,MAAM8K,KAAKwI,QAAU,CAAA,EACnC,CAACvK,OAAAA,EAAQC,OAAAA,CAAAA,EAAU+B,EACnB8B,EAAS,KAAK+G,UAAU1J,CAAAA,EACxBjB,EAAIF,EAAO4L,iBAAiB9H,EAAO5D,CAAC,EACpCC,EAAIF,EAAO2L,iBAAiB9H,EAAO3D,CAAC,EAE1C,MAAO,CACLwL,MAAOpB,EAAOpJ,CAAAA,GAAU,GACxB/B,MAAO,IAAMc,EAAI,KAAOC,EAAI,GAC9B,CACF,CAEAvD,OAAO4E,EAAM,CACX,IAAMQ,EAAO,KAAK+B,YACZ,CAAChC,KAAMiV,EAAS,CAAA,CAAE,EAAIhV,EAEtBsb,EAAqB,KAAKrmB,MAAMwW,oBAClC,CAAC1V,MAAAA,EAAOgS,MAAAA,CAAAA,EAASwT,GAAiCvb,EAAMgV,EAAQsG,CAAAA,EAUpE,GARA,KAAK5W,WAAa3O,EAClB,KAAK4O,WAAaoD,EAEdyT,GAAoBxb,CAAO,IAC7BjK,EAAQ,EACRgS,EAAQiN,EAAOte,QAGb,KAAKgG,QAAQwe,SAAU,CAGpB,KAAKnX,oBACR,KAAKmB,YAAW,EAElB,GAAM,CAACnC,QAASqY,EAAMC,SAAAA,CAAAA,EAAYrb,EAGlCob,EAAK5f,OAAS,KAAKvG,MACnBmmB,EAAKK,cAAgB,KAAKtc,MAC1Bic,EAAKM,WAAa,CAAC,CAACL,EAASK,WAC7BN,EAAKpG,OAASA,EAEd,IAAMtY,EAAU,KAAK0N,6BAA6B5K,CAAAA,EAClD9C,EAAQif,QAAU,KAAKjf,QAAQif,QAC/B,KAAK7P,cAAcsP,EAAMrmB,OAAW,CAClC6mB,SAAU,CAACN,EACX5e,QAAAA,GACC8C,CAAAA,CACL,MAAW,KAAKuE,qBAEd,OAAO/D,EAAK+C,QACZ,KAAKgB,mBAAqB,IAI5B,KAAK6I,eAAeoI,EAAQjf,EAAOgS,EAAOvI,CAAAA,CAC5C,CAEA0F,aAAc,CACZ,GAAM,CAACgW,SAAAA,CAAQ,EAAI,KAAKxe,QAEpB,CAAC,KAAKqH,oBAAsBmX,IAC9B,KAAKnX,mBAAqB,KAAK9O,MAAMgpB,SAASC,WAAW,MAAA,GAG3D,MAAMhZ,YAAW,CACnB,CAEA0H,eAAeoI,EAAQjf,EAAOgS,EAAOvI,EAAM,CACzC,IAAMoH,EAAQpH,IAAS,QACjB,CAACS,OAAAA,EAAQC,OAAAA,EAAQ2D,SAAAA,EAAUwX,SAAAA,CAAAA,EAAY,KAAKtZ,YAC5C4J,EAAY,KAAKtB,0BAA0BtU,EAAOyJ,CAAAA,EAClDgM,EAAgB,KAAKF,iBAAiBK,CAAAA,EACtCJ,EAAiB,KAAKA,eAAe/L,EAAMgM,CAAAA,EAC3CvJ,EAAQhC,EAAOG,KACf8B,EAAQhC,EAAOE,KACf,CAAC+a,SAAAA,EAAUQ,QAAAA,CAAAA,EAAW,KAAKjf,QAC3Bmf,EAAeC,GAASX,CAAYA,EAAAA,EAAWla,OAAOE,kBACtD4a,EAAe,KAAK9mB,MAAMwW,qBAAuB7E,GAASpH,IAAS,OACrEyc,EAAalmB,EAAQ,GAAK,KAAK8S,UAAU9S,EAAQ,CAAA,EAErD,QAASY,EAAIZ,EAAOY,EAAIZ,EAAQgS,EAAO,EAAEpR,EAAG,CAC1C,IAAMse,EAAQD,EAAOre,CAAE,EACjBmL,EAAS,KAAK+G,UAAUlS,CAAAA,EACxB2F,EAAayf,EAAe9G,EAAQ,CAAA,EACpCiH,EAAWnN,GAAcjN,EAAOI,CAAM,CAAA,EACtCgT,EAAS5Y,EAAW2F,CAAM,EAAGhC,EAAOqO,iBAAiBxM,EAAOG,CAAAA,EAAQtL,CAAAA,EACpEwe,EAAS7Y,EAAW4F,CAAM,EAAG0E,GAASsV,EAAWhc,EAAO8R,aAAY,EAAK9R,EAAOoO,iBAAiBzK,EAAW,KAAKzE,WAAWc,EAAQ4B,EAAQ+B,CAAAA,EAAY/B,EAAOI,CAAM,EAAEvL,CAAE,EAE/K2F,EAAW8Y,KAAOnC,MAAMiC,CAAAA,GAAWjC,MAAMkC,CAAW+G,GAAAA,EACpD5f,EAAWnE,KAAOxB,EAAI,GAAK,KAAM0X,IAAIvM,EAAOG,CAAM,EAAGga,EAAWha,CAAAA,CAAM,EAAK4Z,EACvEF,IACFrf,EAAWwF,OAASA,EACpBxF,EAAW6G,IAAMkY,EAAStb,KAAKpJ,CAAE,GAG/B4U,IACFjP,EAAWI,QAAU8O,GAAiB,KAAKnB,0BAA0B1T,EAAGse,EAAMta,OAAS,SAAW6E,CAAI,GAGnGuc,GACH,KAAKjQ,cAAcmJ,EAAOte,EAAG2F,EAAYkD,CAAAA,EAG3Cyc,EAAana,CACf,CAEA,KAAK+J,oBAAoBL,EAAehM,EAAMmM,CAAAA,CAChD,CAKAlC,gBAAiB,CACf,IAAMzJ,EAAO,KAAK+B,YACZhC,EAAOC,EAAKD,MAAQ,CAAA,EAE1B,GAAI,CAAC,KAAKrD,QAAQwe,SAAU,CAC1B,IAAIjjB,EAAM,EACV,QAAStB,EAAIoJ,EAAKrJ,OAAS,EAAGC,GAAK,EAAG,EAAEA,EACtCsB,EAAMpC,KAAKoC,IAAIA,EAAK8H,EAAKpJ,CAAAA,EAAG0G,KAAK,KAAKgN,0BAA0B1T,CAAM,CAAA,EAAA,CAAA,EAExE,OAAOsB,EAAM,GAAKA,EAGpB,IAAM8K,EAAU/C,EAAK+C,QACfoZ,EAASpZ,EAAQrG,SAAWqG,EAAQrG,QAAQ4b,aAAe,EAEjE,GAAI,CAACvY,EAAKrJ,OACR,OAAOylB,EAGT,IAAMC,EAAarc,EAAK,CAAE,EAAC1C,KAAK,KAAKgN,0BAA0B,CAAA,CAAA,EACzDgS,EAAYtc,EAAKA,EAAKrJ,OAAS,CAAE,EAAC2G,KAAK,KAAKgN,0BAA0BtK,EAAKrJ,OAAS,CAAA,CAAA,EAC1F,OAAOb,KAAKoC,IAAIkkB,EAAQC,EAAYC,CAAa,EAAA,CACnD,CACF,kMClHA,SAAS8B,IAAwB,CAC/B,MAAM,IAAIC,MAAM,iFAAmF,CACrG,CAQA,IAAMC,GAAN,MAAMA,CAAAA,CAYJ,OAAOC,SACLC,EACA,CACA1iB,OAAOyB,OAAO+gB,EAAgBG,UAAWD,CAAAA,CAC3C,CAES7hB,QAETjI,YAAYiI,EAAqB,CAC/B,KAAKA,QAAUA,GAAW,CAAA,CAC5B,CAGA+hB,MAAO,CAAA,CAEPC,SAAiD,CAC/C,OAAOP,GAAAA,CACT,CAEArW,OAAuB,CACrB,OAAOqW,GAAAA,CACT,CAEAQ,QAAiB,CACf,OAAOR,GAAAA,CACT,CAEAvmB,KAAc,CACZ,OAAOumB,GAAAA,CACT,CAEAS,MAAe,CACb,OAAOT,GAAAA,CACT,CAEAU,SAAkB,CAChB,OAAOV,GAAAA,CACT,CAEAW,OAAgB,CACd,OAAOX,GAAAA,CACT,CACF,EAEAY,GAAe,CACbC,MAAOX,EAMT,ECpHA,SAASY,GAAaC,EAAS9e,EAAMhD,EAAO+hB,EAAW,CACrD,GAAM,CAACtd,WAAAA,EAAY9B,KAAAA,EAAMkI,QAAAA,CAAAA,EAAWiX,EAC9Bjf,EAAS4B,EAAWE,YAAY9B,OAChCkb,EAAW+D,EAAQnc,SAAUmc,EAAQnc,QAAQrG,QAAUwiB,EAAQnc,QAAQrG,QAAQye,SAAkB,KAEvG,GAAIlb,GAAUG,IAASH,EAAOG,MAAQA,IAAS,KAAO6H,GAAWlI,EAAKrJ,OAAQ,CAC5E,IAAM0oB,EAAenf,EAAOof,eAAiBC,GAAgBC,GAC7D,GAAKJ,GAoBE,GAAItd,EAAW4C,eAAgB,CAIpC,IAAM+a,EAAKzf,EAAK,CAAE,EACZiJ,EAAQ,OAAOwW,EAAGC,UAAa,YAAcD,EAAGC,SAASrf,CAAAA,EAC/D,GAAI4I,EAAO,CACT,IAAMjT,EAAQqpB,EAAarf,EAAMK,EAAMhD,EAAQ4L,CAAAA,EACzClL,EAAMshB,EAAarf,EAAMK,EAAMhD,EAAQ4L,CAAAA,EAC7C,MAAO,CAAC0W,GAAI3pB,EAAM2pB,GAAIC,GAAI7hB,EAAI6hB,EAAE,QA7BpB,CACd,IAAMC,EAASR,EAAarf,EAAMK,EAAMhD,CAAAA,EACxC,GAAI+d,EAAU,CACZ,GAAM,CAACjb,OAAAA,CAAAA,EAAU2B,EAAWE,YACtB,CAACsB,QAAAA,CAAO,EAAI6b,EAEZW,EAAuBxc,EAC1Byc,MAAM,EAAGF,EAAOF,GAAK,CACrB7hB,EAAAA,QAAO,EACPkiB,UACC9K,GAAS,CAAClG,GAAckG,EAAM/U,EAAOE,IAAI,CAAC,CAAA,EAC9Cwf,EAAOF,IAAM7pB,KAAKoC,IAAI,EAAG4nB,CAAAA,EAEzB,IAAMG,EAAuB3c,EAC1Byc,MAAMF,EAAOD,EAAE,EACfI,UACC9K,GAAS,CAAClG,GAAckG,EAAM/U,EAAOE,IAAI,CAAC,CAAA,EAC9Cwf,EAAOD,IAAM9pB,KAAKoC,IAAI,EAAG+nB,CAAAA,EAE3B,OAAOJ,GAeX,MAAO,CAACF,GAAI,EAAGC,GAAI5f,EAAKrJ,OAAS,CAAC,CACpC,CAUA,SAASupB,GAAyBhrB,EAAOmL,EAAM8f,EAAUC,EAAShB,EAAW,CAC3E,IAAMngB,EAAW/J,EAAMmrB,6BAA4B,EAC7ChjB,EAAQ8iB,EAAS9f,CAAK,EAC5B,QAASzJ,EAAI,EAAGuI,EAAOF,EAAStI,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CACrD,GAAM,CAACwI,MAAAA,EAAOY,KAAAA,CAAAA,EAAQf,EAASrI,CAAE,EAC3B,CAAC+oB,GAAAA,EAAIC,GAAAA,CAAAA,EAAMV,GAAajgB,EAASrI,CAAAA,EAAIyJ,EAAMhD,EAAO+hB,CAAAA,EACxD,QAASkB,EAAIX,EAAIW,GAAKV,EAAI,EAAEU,EAAG,CAC7B,IAAMpd,EAAUlD,EAAKsgB,CAAE,EAClBpd,EAAQmS,MACX+K,EAAQld,EAAS9D,EAAOkhB,CAAAA,CAE5B,CACF,CACF,CAOA,SAASC,GAAyBlgB,EAAM,CACtC,IAAMmgB,EAAOngB,EAAK8S,QAAQ,GAAA,IAAS,GAC7BsN,EAAOpgB,EAAK8S,QAAQ,GAAA,IAAS,GAEnC,OAAO,SAASuN,EAAKC,EAAK,CACxB,IAAMC,EAASJ,EAAO1qB,KAAKwY,IAAIoS,EAAIviB,EAAIwiB,EAAIxiB,CAAC,EAAI,EAC1C0iB,EAASJ,EAAO3qB,KAAKwY,IAAIoS,EAAItiB,EAAIuiB,EAAIviB,CAAC,EAAI,EAChD,OAAOtI,KAAKgrB,KAAKhrB,KAAKirB,IAAIH,EAAQ,CAAK9qB,EAAAA,KAAKirB,IAAIF,EAAQ,CAAA,CAAA,CAC1D,CACF,CAWA,SAASG,GAAkB9rB,EAAOirB,EAAU9f,EAAM4gB,EAAkBC,EAAkB,CACpF,IAAMxqB,EAAQ,CAAA,EAEd,MAAI,CAACwqB,GAAoB,CAAChsB,EAAMisB,cAAchB,CAAW,GAazDD,GAAyBhrB,EAAOmL,EAAM8f,EATf,SAASjd,EAASxD,EAAcN,EAAO,CACxD,CAAC8hB,GAAoB,CAACE,GAAele,EAAShO,EAAMgV,UAAW,CAAI,GAGnEhH,EAAQme,QAAQlB,EAAShiB,EAAGgiB,EAAS/hB,EAAG6iB,CAAmB,GAC7DvqB,EAAMkB,KAAK,CAACsL,QAAAA,EAASxD,aAAAA,EAAcN,MAAAA,CAAK,CAAA,CAE5C,EAEgE,EAAI,EAC7D1I,CACT,CAUA,SAAS4qB,GAAsBpsB,EAAOirB,EAAU9f,EAAM4gB,EAAkB,CACtE,IAAIvqB,EAAQ,CAAA,EAEZ,SAAS6qB,EAAere,EAASxD,EAAcN,EAAO,CACpD,GAAM,CAAC2W,WAAAA,EAAYC,SAAAA,CAAAA,EAAY9S,EAAQse,SAAS,CAAC,aAAc,YAAaP,CAAAA,EACtE,CAACzK,MAAAA,CAAAA,EAASiL,GAAkBve,EAAS,CAAC/E,EAAGgiB,EAAShiB,EAAGC,EAAG+hB,EAAS/hB,CAAC,CAAA,EAEpEqY,GAAcD,EAAOT,EAAYC,CAAW,GAC9Ctf,EAAMkB,KAAK,CAACsL,QAAAA,EAASxD,aAAAA,EAAcN,MAAAA,CAAK,CAAA,CAE5C,CAEA8gB,OAAAA,GAAyBhrB,EAAOmL,EAAM8f,EAAUoB,CAAAA,EACzC7qB,CACT,CAYA,SAASgrB,GAAyBxsB,EAAOirB,EAAU9f,EAAM+e,EAAW6B,EAAkBC,EAAkB,CACtG,IAAIxqB,EAAQ,CAAA,EACNirB,EAAiBpB,GAAyBlgB,CAAAA,EAC5CuhB,EAAc1gB,OAAOE,kBAEzB,SAASmgB,EAAere,EAASxD,EAAcN,EAAO,CACpD,IAAMiiB,EAAUne,EAAQme,QAAQlB,EAAShiB,EAAGgiB,EAAS/hB,EAAG6iB,CAAAA,EACxD,GAAI7B,GAAa,CAACiC,EAChB,OAGF,IAAM7O,EAAStP,EAAQ2e,eAAeZ,CAAAA,EAEtC,GAAI,EADgB,CAAC,CAACC,GAAoBhsB,EAAMisB,cAAc3O,CAAAA,IAC1C,CAAC6O,EACnB,OAGF,IAAMS,EAAWH,EAAexB,EAAU3N,CAAAA,EACtCsP,EAAWF,GACblrB,EAAQ,CAAC,CAACwM,QAAAA,EAASxD,aAAAA,EAAcN,MAAAA,CAAK,CAAE,EACxCwiB,EAAcE,GACLA,IAAaF,GAEtBlrB,EAAMkB,KAAK,CAACsL,QAAAA,EAASxD,aAAAA,EAAcN,MAAAA,CAAK,CAAA,CAE5C,CAEA8gB,OAAAA,GAAyBhrB,EAAOmL,EAAM8f,EAAUoB,CAAAA,EACzC7qB,CACT,CAYA,SAASqrB,GAAgB7sB,EAAOirB,EAAU9f,EAAM+e,EAAW6B,EAAkBC,EAAkB,CAC7F,MAAI,CAACA,GAAoB,CAAChsB,EAAMisB,cAAchB,CAAW,EAChD,CAAA,EAGF9f,IAAS,KAAO,CAAC+e,EACpBkC,GAAsBpsB,EAAOirB,EAAU9f,EAAM4gB,CAAAA,EAC7CS,GAAyBxsB,EAAOirB,EAAU9f,EAAM+e,EAAW6B,EAAkBC,CAAiB,CACpG,CAWA,SAASc,GAAa9sB,EAAOirB,EAAU9f,EAAM+e,EAAW6B,EAAkB,CACxE,IAAMvqB,EAAQ,CAAA,EACRurB,EAAc5hB,IAAS,IAAM,WAAa,WAC5C6hB,EAAiB,GAWrB,OATAhC,GAAyBhrB,EAAOmL,EAAM8f,EAAU,CAACjd,EAASxD,EAAcN,IAAU,CAC5E8D,EAAQ+e,CAAY,GAAI/e,EAAQ+e,CAAY,EAAC9B,EAAS9f,CAAK,EAAE4gB,CAAmB,IAClFvqB,EAAMkB,KAAK,CAACsL,QAAAA,EAASxD,aAAAA,EAAcN,MAAAA,CAAK,CAAA,EACxC8iB,EAAiBA,GAAkBhf,EAAQme,QAAQlB,EAAShiB,EAAGgiB,EAAS/hB,EAAG6iB,CAAAA,EAE/E,CAAA,EAII7B,GAAa,CAAC8C,EACT,CAAA,EAEFxrB,CACT,CAMA,IAAAyrB,GAAe,CAEbjC,yBAAAA,GAGAkC,MAAO,CAYLhjB,MAAMlK,EAAOujB,EAAG9b,EAASskB,EAAkB,CACzC,IAAMd,EAAWkC,GAAoB5J,EAAGvjB,CAAAA,EAElCmL,EAAO1D,EAAQ0D,MAAQ,IACvB6gB,EAAmBvkB,EAAQukB,kBAAoB,GAC/CxqB,EAAQiG,EAAQyiB,UAClB4B,GAAkB9rB,EAAOirB,EAAU9f,EAAM4gB,EAAkBC,CAAAA,EAC3Da,GAAgB7sB,EAAOirB,EAAU9f,EAAM,GAAO4gB,EAAkBC,CAAiB,EAC/ElX,EAAW,CAAA,EAEjB,OAAKtT,EAAMC,QAIXzB,EAAMmrB,6BAA4B,EAAG3qB,QAASuK,GAAS,CACrD,IAAMb,EAAQ1I,EAAM,CAAA,EAAG0I,MACjB8D,EAAUjD,EAAKD,KAAKZ,CAAM,EAG5B8D,GAAW,CAACA,EAAQmS,MACtBrL,EAASpS,KAAK,CAACsL,QAAAA,EAASxD,aAAcO,EAAKb,MAAOA,MAAAA,CAAK,CAAA,CAE3D,CAAA,EAEO4K,GAbE,CAAA,CAcX,EAYAhH,QAAQ9N,EAAOujB,EAAG9b,EAASskB,EAAkB,CAC3C,IAAMd,EAAWkC,GAAoB5J,EAAGvjB,CAAAA,EAClCmL,EAAO1D,EAAQ0D,MAAQ,KACvB6gB,EAAmBvkB,EAAQukB,kBAAoB,GACjDxqB,EAAQiG,EAAQyiB,UAChB4B,GAAkB9rB,EAAOirB,EAAU9f,EAAM4gB,EAAkBC,CAAAA,EAC7Da,GAAgB7sB,EAAOirB,EAAU9f,EAAM,GAAO4gB,EAAkBC,CAAiB,EAEnF,GAAIxqB,EAAMC,OAAS,EAAG,CACpB,IAAM+I,EAAehJ,EAAM,CAAA,EAAGgJ,aACxBM,EAAO9K,EAAMwR,eAAehH,CAAAA,EAAcM,KAChDtJ,EAAQ,CAAA,EACR,QAASE,EAAI,EAAGA,EAAIoJ,EAAKrJ,OAAQ,EAAEC,EACjCF,EAAMkB,KAAK,CAACsL,QAASlD,EAAKpJ,CAAE,EAAE8I,aAAAA,EAAcN,MAAOxI,CAAC,CAAA,EAIxD,OAAOF,CACT,EAYAwe,MAAMhgB,EAAOujB,EAAG9b,EAASskB,EAAkB,CACzC,IAAMd,EAAWkC,GAAoB5J,EAAGvjB,CAAAA,EAClCmL,EAAO1D,EAAQ0D,MAAQ,KACvB6gB,EAAmBvkB,EAAQukB,kBAAoB,GACrD,OAAOF,GAAkB9rB,EAAOirB,EAAU9f,EAAM4gB,EAAkBC,CAAAA,CACpE,EAWAoB,QAAQptB,EAAOujB,EAAG9b,EAASskB,EAAkB,CAC3C,IAAMd,EAAWkC,GAAoB5J,EAAGvjB,CAAAA,EAClCmL,EAAO1D,EAAQ0D,MAAQ,KACvB6gB,EAAmBvkB,EAAQukB,kBAAoB,GACrD,OAAOa,GAAgB7sB,EAAOirB,EAAU9f,EAAM1D,EAAQyiB,UAAW6B,EAAkBC,CAAAA,CACrF,EAWA/iB,EAAEjJ,EAAOujB,EAAG9b,EAASskB,EAAkB,CACrC,IAAMd,EAAWkC,GAAoB5J,EAAGvjB,CAAAA,EACxC,OAAO8sB,GAAa9sB,EAAOirB,EAAU,IAAKxjB,EAAQyiB,UAAW6B,CAAAA,CAC/D,EAWA7iB,EAAElJ,EAAOujB,EAAG9b,EAASskB,EAAkB,CACrC,IAAMd,EAAWkC,GAAoB5J,EAAGvjB,CAAAA,EACxC,OAAO8sB,GAAa9sB,EAAOirB,EAAU,IAAKxjB,EAAQyiB,UAAW6B,CAAAA,CAC/D,CACF,CACF,EC3XMsB,GAAmB,CAAC,OAAQ,MAAO,QAAS,QAAS,EAE3D,SAASC,GAAiBC,EAAOtC,EAAU,CACzC,OAAOsC,EAAM9f,OAAOwO,GAAKA,EAAEuR,MAAQvC,CAAAA,CACrC,CAEA,SAASwC,GAA4BF,EAAOpiB,EAAM,CAChD,OAAOoiB,EAAM9f,OAAOwO,GAAKoR,GAAiBpP,QAAQhC,EAAEuR,GAAG,IAAM,IAAMvR,EAAEyR,IAAIviB,OAASA,CAAAA,CACpF,CAEA,SAASwiB,GAAaJ,EAAO3kB,EAAS,CACpC,OAAO2kB,EAAMzU,KAAK,CAACC,EAAGrP,IAAM,CAC1B,IAAMkkB,EAAKhlB,EAAUc,EAAIqP,EACnBgD,EAAKnT,EAAUmQ,EAAIrP,EACzB,OAAOkkB,EAAG7H,SAAWhK,EAAGgK,OACtB6H,EAAG1jB,MAAQ6R,EAAG7R,MACd0jB,EAAG7H,OAAShK,EAAGgK,MACnB,CAAA,CACF,CAEA,SAAS8H,GAAUC,EAAO,CACxB,IAAMC,EAAc,CAAA,EAChBrsB,EAAGuI,EAAMyjB,EAAKF,EAAKpjB,EAAO4jB,EAE9B,IAAKtsB,EAAI,EAAGuI,GAAQ6jB,GAAS,CAAA,GAAIrsB,OAAQC,EAAIuI,EAAM,EAAEvI,EACnDgsB,EAAMI,EAAMpsB,CAAE,EACb,CAACupB,SAAUuC,EAAK/lB,QAAS,CAAC2C,MAAAA,EAAO4jB,YAAAA,EAAc,CAAC,CAAC,EAAIN,EACtDK,EAAYrrB,KAAK,CACfwH,MAAOxI,EACPgsB,IAAAA,EACAF,IAAAA,EACAnS,WAAYqS,EAAIvS,aAAY,EAC5B4K,OAAQ2H,EAAI3H,OACZ3b,MAAOA,GAAUojB,EAAMpjB,EACvB4jB,YAAAA,CACF,CAAA,EAEF,OAAOD,CACT,CAEA,SAASE,GAAYC,EAAS,CAC5B,IAAM9hB,EAAS,CAAA,EACf,QAAW+hB,KAAQD,EAAS,CAC1B,GAAM,CAAC9jB,MAAAA,EAAOojB,IAAAA,EAAKQ,YAAAA,CAAAA,EAAeG,EAClC,GAAI,CAAC/jB,GAAS,CAACijB,GAAiBe,SAASZ,CAAM,EAC7C,SAEF,IAAMa,EAASjiB,EAAOhC,CAAAA,IAAWgC,EAAOhC,CAAAA,EAAS,CAAC0I,MAAO,EAAGwb,OAAQ,EAAGvI,OAAQ,EAAG3d,KAAM,IACxFimB,EAAOvb,QACPub,EAAOtI,QAAUiI,CACnB,CACA,OAAO5hB,CACT,CAKA,SAASmiB,GAAcL,EAASM,EAAQ,CACtC,IAAMpiB,EAAS6hB,GAAYC,CAAAA,EACrB,CAACO,aAAAA,EAAcC,cAAAA,CAAAA,EAAiBF,EAClC9sB,EAAGuI,EAAM0kB,EACb,IAAKjtB,EAAI,EAAGuI,EAAOikB,EAAQzsB,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CAChDitB,EAAST,EAAQxsB,CAAE,EACnB,GAAM,CAACktB,SAAAA,CAAAA,EAAYD,EAAOjB,IACpBtjB,EAAQgC,EAAOuiB,EAAOvkB,KAAK,EAC3BxG,EAASwG,GAASukB,EAAOX,YAAc5jB,EAAM2b,OAC/C4I,EAAOtT,YACTsT,EAAOnR,MAAQ5Z,EAASA,EAAS6qB,EAAeG,GAAYJ,EAAOK,eACnEF,EAAOpR,OAASmR,IAEhBC,EAAOnR,MAAQiR,EACfE,EAAOpR,OAAS3Z,EAASA,EAAS8qB,EAAgBE,GAAYJ,EAAOM,gBAEzE,CACA,OAAO1iB,CACT,CAEA,SAAS2iB,GAAiBjB,EAAO,CAC/B,IAAMC,EAAcF,GAAUC,CAAAA,EACxBc,EAAWjB,GAAaI,EAAYtgB,OAAO0gB,GAAQA,EAAKT,IAAIkB,QAAQ,EAAG,EAAI,EAC3EtlB,EAAOqkB,GAAaL,GAAiBS,EAAa,MAAA,EAAS,EAAI,EAC/D3kB,EAAQukB,GAAaL,GAAiBS,EAAa,OAAA,CAAA,EACnD5kB,EAAMwkB,GAAaL,GAAiBS,EAAa,KAAA,EAAQ,EAAI,EAC7D1kB,EAASskB,GAAaL,GAAiBS,EAAa,QAAA,CAAA,EACpDiB,EAAmBvB,GAA4BM,EAAa,GAAA,EAC5DkB,EAAiBxB,GAA4BM,EAAa,GAAA,EAEhE,MAAO,CACLa,SAAAA,EACAM,WAAY5lB,EAAKsP,OAAOzP,CAAAA,EACxBgmB,eAAgB/lB,EAAMwP,OAAOqW,CAAAA,EAAgBrW,OAAOvP,CAAAA,EAAQuP,OAAOoW,CAAAA,EACnEha,UAAWsY,GAAiBS,EAAa,WAAA,EACzCqB,SAAU9lB,EAAKsP,OAAOxP,CAAAA,EAAOwP,OAAOqW,CAAAA,EACpC5T,WAAYlS,EAAIyP,OAAOvP,CAAAA,EAAQuP,OAAOoW,CAAAA,CACxC,CACF,CAEA,SAASK,GAAeC,EAAYta,EAAW+D,EAAGrP,EAAG,CACnD,OAAO9I,KAAKoC,IAAIssB,EAAWvW,CAAE,EAAE/D,EAAU+D,CAAAA,CAAE,EAAInY,KAAKoC,IAAIssB,EAAW5lB,CAAAA,EAAIsL,EAAUtL,CAAE,CAAA,CACrF,CAEA,SAAS6lB,GAAiBD,EAAYE,EAAY,CAChDF,EAAWnmB,IAAMvI,KAAKoC,IAAIssB,EAAWnmB,IAAKqmB,EAAWrmB,GAAG,EACxDmmB,EAAWhmB,KAAO1I,KAAKoC,IAAIssB,EAAWhmB,KAAMkmB,EAAWlmB,IAAI,EAC3DgmB,EAAWjmB,OAASzI,KAAKoC,IAAIssB,EAAWjmB,OAAQmmB,EAAWnmB,MAAM,EACjEimB,EAAWlmB,MAAQxI,KAAKoC,IAAIssB,EAAWlmB,MAAOomB,EAAWpmB,KAAK,CAChE,CAEA,SAASqmB,GAAWza,EAAWwZ,EAAQG,EAAQviB,EAAQ,CACrD,GAAM,CAACohB,IAAAA,EAAKE,IAAAA,CAAAA,EAAOiB,EACbW,EAAata,EAAUsa,WAG7B,GAAI,CAAC5oB,GAAS8mB,CAAM,EAAA,CACdmB,EAAOvmB,OAET4M,EAAUwY,CAAAA,GAAQmB,EAAOvmB,MAE3B,IAAMgC,EAAQgC,EAAOuiB,EAAOvkB,KAAK,GAAK,CAAChC,KAAM,EAAG0K,MAAO,CAAC,EACxD1I,EAAMhC,KAAOxH,KAAKoC,IAAIoH,EAAMhC,KAAMumB,EAAOtT,WAAaqS,EAAInQ,OAASmQ,EAAIlQ,KAAK,EAC5EmR,EAAOvmB,KAAOgC,EAAMhC,KAAOgC,EAAM0I,MACjCkC,EAAUwY,CAAAA,GAAQmB,EAAOvmB,KAGvBslB,EAAIgC,YACNH,GAAiBD,EAAY5B,EAAIgC,WAAU,CAAA,EAG7C,IAAMC,EAAW/uB,KAAKoC,IAAI,EAAGwrB,EAAOoB,WAAaP,GAAeC,EAAYta,EAAW,OAAQ,OAAA,CAAA,EACzF6a,EAAYjvB,KAAKoC,IAAI,EAAGwrB,EAAOsB,YAAcT,GAAeC,EAAYta,EAAW,MAAO,QAAA,CAAA,EAC1F+a,EAAeJ,IAAa3a,EAAUgb,EACtCC,EAAgBJ,IAAc7a,EAAUkb,EAC9Clb,OAAAA,EAAUgb,EAAIL,EACd3a,EAAUkb,EAAIL,EAGPlB,EAAOtT,WACV,CAAC8U,KAAMJ,EAAcK,MAAOH,GAC5B,CAACE,KAAMF,EAAeG,MAAOL,EACnC,CAEA,SAASM,GAAiBrb,EAAW,CACnC,IAAMsa,EAAata,EAAUsa,WAE7B,SAASgB,EAAU9C,EAAK,CACtB,IAAM+C,EAAS3vB,KAAKoC,IAAIssB,EAAW9B,CAAAA,EAAOxY,EAAUwY,CAAAA,EAAM,CAAA,EAC1DxY,OAAAA,EAAUwY,CAAAA,GAAQ+C,EACXA,CACT,CACAvb,EAAU9L,GAAKonB,EAAU,KAAA,EACzBtb,EAAU/L,GAAKqnB,EAAU,MAAA,EACzBA,EAAU,OAAA,EACVA,EAAU,QAAA,CACZ,CAEA,SAASE,GAAWnV,EAAYrG,EAAW,CACzC,IAAMsa,EAAata,EAAUsa,WAE7B,SAASmB,EAAmBC,EAAW,CACrC,IAAMC,EAAS,CAACrnB,KAAM,EAAGH,IAAK,EAAGC,MAAO,EAAGC,OAAQ,CAAC,EACpDqnB,OAAAA,EAAUlwB,QAASgtB,GAAQ,CACzBmD,EAAOnD,CAAAA,EAAO5sB,KAAKoC,IAAIgS,EAAUwY,CAAI,EAAE8B,EAAW9B,CAAI,CAAA,CACxD,CAAA,EACOmD,CACT,CAEA,OACIF,EADGpV,EACgB,CAAC,OAAQ,OAAQ,EACjB,CAAC,MAAO,SADS,CAE1C,CAEA,SAASuV,GAAS9C,EAAO9Y,EAAWwZ,EAAQpiB,EAAQ,CAClD,IAAMykB,EAAa,CAAA,EACfnvB,EAAGuI,EAAM0kB,EAAQjB,EAAKoD,EAAOC,EAEjC,IAAKrvB,EAAI,EAAGuI,EAAO6jB,EAAMrsB,OAAQqvB,EAAQ,EAAGpvB,EAAIuI,EAAM,EAAEvI,EAAG,CACzDitB,EAASb,EAAMpsB,CAAE,EACjBgsB,EAAMiB,EAAOjB,IAEbA,EAAI/nB,OACFgpB,EAAOnR,OAASxI,EAAUgb,EAC1BrB,EAAOpR,QAAUvI,EAAUkb,EAC3BM,GAAW7B,EAAOtT,WAAYrG,CAAAA,CAAAA,EAEhC,GAAM,CAACmb,KAAAA,EAAMC,MAAAA,CAAAA,EAASX,GAAWza,EAAWwZ,EAAQG,EAAQviB,CAAAA,EAI5D0kB,GAASX,GAAQU,EAAWpvB,OAG5BsvB,EAAUA,GAAWX,EAEhB1C,EAAIkB,UACPiC,EAAWnuB,KAAKisB,CAAAA,CAEpB,CAEA,OAAOmC,GAASF,GAASC,EAAY7b,EAAWwZ,EAAQpiB,CAAW2kB,GAAAA,CACrE,CAEA,SAASC,GAAWtD,EAAKpkB,EAAMH,EAAKqU,EAAOD,EAAQ,CACjDmQ,EAAIvkB,IAAMA,EACVukB,EAAIpkB,KAAOA,EACXokB,EAAItkB,MAAQE,EAAOkU,EACnBkQ,EAAIrkB,OAASF,EAAMoU,EACnBmQ,EAAIlQ,MAAQA,EACZkQ,EAAInQ,OAASA,CACf,CAEA,SAAS0T,GAAWnD,EAAO9Y,EAAWwZ,EAAQpiB,EAAQ,CACpD,IAAM8kB,EAAc1C,EAAO2C,QACvB,CAACloB,EAAAA,EAAGC,EAAAA,CAAAA,EAAK8L,EAEb,QAAW2Z,KAAUb,EAAO,CAC1B,IAAMJ,EAAMiB,EAAOjB,IACbtjB,EAAQgC,EAAOuiB,EAAOvkB,KAAK,GAAK,CAAC0I,MAAO,EAAGwb,OAAQ,EAAGvI,OAAQ,CAAC,EAC/DA,EAAS4I,EAAQX,YAAc5jB,EAAM2b,QAAW,EACtD,GAAI4I,EAAOtT,WAAY,CACrB,IAAMmC,EAAQxI,EAAUgb,EAAIjK,EACtBxI,EAASnT,EAAMhC,MAAQslB,EAAInQ,OAC7B5H,GAAQvL,EAAMtJ,KAAK,IACrBoI,EAAIkB,EAAMtJ,OAER4sB,EAAIkB,SACNoC,GAAWtD,EAAKwD,EAAY5nB,KAAMJ,EAAGslB,EAAOoB,WAAasB,EAAY9nB,MAAQ8nB,EAAY5nB,KAAMiU,CAAAA,EAE/FyT,GAAWtD,EAAK1Y,EAAU1L,KAAOc,EAAMkkB,OAAQplB,EAAGsU,EAAOD,CAAAA,EAE3DnT,EAAMtJ,MAAQoI,EACdkB,EAAMkkB,QAAU9Q,EAChBtU,EAAIwkB,EAAIrkB,WACH,CACL,IAAMkU,EAASvI,EAAUkb,EAAInK,EACvBvI,EAAQpT,EAAMhC,MAAQslB,EAAIlQ,MAC5B7H,GAAQvL,EAAMtJ,KAAK,IACrBmI,EAAImB,EAAMtJ,OAER4sB,EAAIkB,SACNoC,GAAWtD,EAAKzkB,EAAGioB,EAAY/nB,IAAKqU,EAAOgR,EAAOsB,YAAcoB,EAAY7nB,OAAS6nB,EAAY/nB,GAAG,EAEpG6nB,GAAWtD,EAAKzkB,EAAG+L,EAAU7L,IAAMiB,EAAMkkB,OAAQ9Q,EAAOD,CAAAA,EAE1DnT,EAAMtJ,MAAQmI,EACdmB,EAAMkkB,QAAU/Q,EAChBtU,EAAIykB,EAAItkB,MAEZ,CAEA4L,EAAU/L,EAAIA,EACd+L,EAAU9L,EAAIA,CAChB,CAwBA,IAAAglB,GAAe,CAQbkD,OAAOpxB,EAAO4B,EAAM,CACb5B,EAAM8tB,QACT9tB,EAAM8tB,MAAQ,CAAA,GAIhBlsB,EAAKgtB,SAAWhtB,EAAKgtB,UAAY,GACjChtB,EAAKqpB,SAAWrpB,EAAKqpB,UAAY,MACjCrpB,EAAKmkB,OAASnkB,EAAKmkB,QAAU,EAE7BnkB,EAAKyvB,QAAUzvB,EAAKyvB,SAAW,UAAW,CACxC,MAAO,CAAC,CACNC,EAAG,EACH3vB,KAAKqT,EAAW,CACdpT,EAAKD,KAAKqT,CAAAA,CACZ,CACF,CAAE,CACJ,EAEAhV,EAAM8tB,MAAMprB,KAAKd,CAAAA,CACnB,EAOA2vB,UAAUvxB,EAAOwxB,EAAY,CAC3B,IAAMtnB,EAAQlK,EAAM8tB,MAAQ9tB,EAAM8tB,MAAM7P,QAAQuT,CAAc,EAAA,GAC1DtnB,IAAU,IACZlK,EAAM8tB,MAAMjW,OAAO3N,EAAO,CAAA,CAE9B,EAQAzD,UAAUzG,EAAO4B,EAAM6F,EAAS,CAC9B7F,EAAKgtB,SAAWnnB,EAAQmnB,SACxBhtB,EAAKqpB,SAAWxjB,EAAQwjB,SACxBrpB,EAAKmkB,OAASte,EAAQse,MACxB,EAUApgB,OAAO3F,EAAOwd,EAAOD,EAAQkU,EAAY,CACvC,GAAI,CAACzxB,EACH,OAGF,IAAMmxB,EAAUO,GAAU1xB,EAAMyH,QAAQknB,OAAOwC,OAAO,EAChDtC,EAAiBjuB,KAAKoC,IAAIwa,EAAQ2T,EAAQ3T,MAAO,CAAA,EACjDsR,EAAkBluB,KAAKoC,IAAIua,EAAS4T,EAAQ5T,OAAQ,CAAA,EACpDuQ,EAAQiB,GAAiB/uB,EAAM8tB,KAAK,EACpC6D,EAAgB7D,EAAMsB,SACtBwC,EAAkB9D,EAAMzS,WAI9BwW,GAAK7xB,EAAM8tB,MAAOJ,GAAO,CACnB,OAAOA,EAAIoE,cAAiB,YAC9BpE,EAAIoE,aAAY,CAEpB,CAAA,EA6BA,IAAMC,EAA0BJ,EAAc9uB,OAAO,CAACkiB,EAAOoJ,IAC3DA,EAAKT,IAAIjmB,SAAW0mB,EAAKT,IAAIjmB,QAAQ+f,UAAY,GAAQzC,EAAQA,EAAQ,EAAG,CAAM,GAAA,EAE9EyJ,EAAS5nB,OAAOoP,OAAO,CAC3B4Z,WAAYpS,EACZsS,YAAavS,EACb4T,QAAAA,EACAtC,eAAAA,EACAC,gBAAAA,EACAL,aAAcI,EAAiB,EAAIkD,EACnCrD,cAAeI,EAAkB,CACnC,CAAA,EACMQ,EAAa1oB,OAAOyB,OAAO,CAAA,EAAI8oB,CAAAA,EACrC5B,GAAiBD,EAAYoC,GAAUD,CAAAA,CAAAA,EACvC,IAAMzc,EAAYpO,OAAOyB,OAAO,CAC9BinB,WAAAA,EACAU,EAAGnB,EACHqB,EAAGpB,EACH7lB,EAAGkoB,EAAQ7nB,KACXJ,EAAGioB,EAAQhoB,KACVgoB,CAAAA,EAEG/kB,EAASmiB,GAAcoD,EAAc/Y,OAAOgZ,CAAkBpD,EAAAA,CAAAA,EAGpEoC,GAAS9C,EAAMc,SAAU5Z,EAAWwZ,EAAQpiB,CAAAA,EAG5CwkB,GAASe,EAAe3c,EAAWwZ,EAAQpiB,CAAAA,EAGvCwkB,GAASgB,EAAiB5c,EAAWwZ,EAAQpiB,CAAS,GAExDwkB,GAASe,EAAe3c,EAAWwZ,EAAQpiB,CAAAA,EAG7CikB,GAAiBrb,CAAAA,EAGjBic,GAAWnD,EAAMoB,WAAYla,EAAWwZ,EAAQpiB,CAAAA,EAGhD4I,EAAU/L,GAAK+L,EAAUgb,EACzBhb,EAAU9L,GAAK8L,EAAUkb,EAEzBe,GAAWnD,EAAMqB,eAAgBna,EAAWwZ,EAAQpiB,CAAAA,EAEpDpM,EAAMgV,UAAY,CAChB1L,KAAM0L,EAAU1L,KAChBH,IAAK6L,EAAU7L,IACfC,MAAO4L,EAAU1L,KAAO0L,EAAUgb,EAClC3mB,OAAQ2L,EAAU7L,IAAM6L,EAAUkb,EAClC3S,OAAQvI,EAAUkb,EAClB1S,MAAOxI,EAAUgb,CACnB,EAGA6B,GAAK/D,EAAM9Y,UAAY2Z,GAAW,CAChC,IAAMjB,EAAMiB,EAAOjB,IACnB9mB,OAAOyB,OAAOqlB,EAAK1tB,EAAMgV,SAAS,EAClC0Y,EAAI/nB,OAAOqP,EAAUgb,EAAGhb,EAAUkb,EAAG,CAAC5mB,KAAM,EAAGH,IAAK,EAAGC,MAAO,EAAGC,OAAQ,CAAC,CAAA,CAC5E,CAAA,CACF,CACF,EC9bqB2oB,GAAN,KAAMA,CAOnBC,eAAeC,EAAQ3P,EAAa,CAAA,CAQpC4P,eAAe9c,EAAS,CACtB,MAAO,EACT,CASA+c,iBAAiBpyB,EAAOG,EAAMkyB,EAAU,CAAA,CAQxCC,oBAAoBtyB,EAAOG,EAAMkyB,EAAU,CAAA,CAK3CE,qBAAsB,CACpB,MAAO,EACT,CASAC,eAAexkB,EAASwP,EAAOD,EAAQgF,EAAa,CAClD/E,OAAAA,EAAQ5c,KAAKoC,IAAI,EAAGwa,GAASxP,EAAQwP,KAAK,EAC1CD,EAASA,GAAUvP,EAAQuP,OACpB,CACLC,MAAAA,EACAD,OAAQ3c,KAAKoC,IAAI,EAAGuf,EAAc3hB,KAAKqE,MAAMuY,EAAQ+E,CAAAA,EAAehF,CAAM,CAC5E,CACF,CAMAkV,WAAWP,EAAQ,CACjB,MAAO,EACT,CAMAQ,aAAapsB,EAAQ,CAErB,CACF,ECtEqBqsB,GAAN,cAA4BX,EAAAA,CACzCC,eAAerwB,EAAM,CAInB,OAAOA,GAAQA,EAAK+Q,YAAc/Q,EAAK+Q,WAAW,IAAA,GAAS,IAC7D,CACA+f,aAAapsB,EAAQ,CACnBA,EAAOmB,QAAQV,UAAY,EAC7B,CACF,ECTM6rB,GAAc,WAOdC,GAAc,CAClBC,WAAY,YACZC,UAAW,YACXC,SAAU,UACVC,aAAc,aACdC,YAAa,YACbC,YAAa,YACbC,UAAW,UACXC,aAAc,WACdC,WAAY,UACd,EAEMC,GAAgBprB,GAASA,IAAU,MAAQA,IAAU,GAQ3D,SAASqrB,GAAWtB,EAAQ3P,EAAa,CACvC,IAAMM,EAAQqP,EAAOrP,MAIf4Q,EAAevB,EAAOwB,aAAa,QAAA,EACnCC,EAAczB,EAAOwB,aAAa,OAAA,EAsBxC,GAnBAxB,EAAOU,EAAAA,EAAe,CACpBlyB,QAAS,CACP6c,OAAQkW,EACRjW,MAAOmW,EACP9Q,MAAO,CACL2E,QAAS3E,EAAM2E,QACfjK,OAAQsF,EAAMtF,OACdC,MAAOqF,EAAMrF,KACf,CACF,CACF,EAKAqF,EAAM2E,QAAU3E,EAAM2E,SAAW,QAEjC3E,EAAM+Q,UAAY/Q,EAAM+Q,WAAa,aAEjCL,GAAcI,CAAc,EAAA,CAC9B,IAAME,EAAeC,GAAa5B,EAAQ,OAAA,EACtC2B,IAAiB/zB,SACnBoyB,EAAO1U,MAAQqW,GAInB,GAAIN,GAAcE,CAAe,EAC/B,GAAIvB,EAAOrP,MAAMtF,SAAW,GAI1B2U,EAAO3U,OAAS2U,EAAO1U,OAAS+E,GAAe,OAC1C,CACL,IAAMwR,EAAgBD,GAAa5B,EAAQ,QAAA,EACvC6B,IAAkBj0B,SACpBoyB,EAAO3U,OAASwW,GAKtB,OAAO7B,CACT,CAIA,IAAM8B,GAAuBC,GAA+B,CAACC,QAAS,EAAI,EAAI,GAE9E,SAASC,GAAYC,EAAMj0B,EAAMkyB,EAAU,CACrC+B,GACFA,EAAKhC,iBAAiBjyB,EAAMkyB,EAAU2B,EAAAA,CAE1C,CAEA,SAASK,GAAer0B,EAAOG,EAAMkyB,EAAU,CACzCryB,GAASA,EAAMkyB,QACjBlyB,EAAMkyB,OAAOI,oBAAoBnyB,EAAMkyB,EAAU2B,EAAAA,CAErD,CAEA,SAASM,GAAgB9xB,EAAOxC,EAAO,CACrC,IAAMG,EAAO0yB,GAAYrwB,EAAMrC,IAAI,GAAKqC,EAAMrC,KACxC,CAAC8I,EAAAA,EAAGC,EAAAA,CAAAA,EAAKikB,GAAoB3qB,EAAOxC,CAAAA,EAC1C,MAAO,CACLG,KAAAA,EACAH,MAAAA,EACAu0B,OAAQ/xB,EACRyG,EAAGA,IAAMnJ,OAAYmJ,EAAI,KACzBC,EAAGA,IAAMpJ,OAAYoJ,EAAI,IAC3B,CACF,CAEA,SAASsrB,GAAiBC,EAAUvC,EAAQ,CAC1C,QAAWkC,KAAQK,EACjB,GAAIL,IAASlC,GAAUkC,EAAKM,SAASxC,CAAS,EAC5C,MAAO,EAGb,CAEA,SAASyC,GAAqB30B,EAAOG,EAAMkyB,EAAU,CACnD,IAAMH,EAASlyB,EAAMkyB,OACf0C,EAAW,IAAIC,iBAAiBC,GAAW,CAC/C,IAAIC,EAAU,GACd,QAAWxa,KAASua,EAClBC,EAAUA,GAAWP,GAAiBja,EAAMya,WAAY9C,CAAAA,EACxD6C,EAAUA,GAAW,CAACP,GAAiBja,EAAM0a,aAAc/C,CAAAA,EAEzD6C,GACF1C,EAAAA,CAEJ,CAAA,EACAuC,OAAAA,EAASM,QAAQC,SAAU,CAACC,UAAW,GAAMC,QAAS,EAAI,CAAA,EACnDT,CACT,CAEA,SAASU,GAAqBt1B,EAAOG,EAAMkyB,EAAU,CACnD,IAAMH,EAASlyB,EAAMkyB,OACf0C,EAAW,IAAIC,iBAAiBC,GAAW,CAC/C,IAAIC,EAAU,GACd,QAAWxa,KAASua,EAClBC,EAAUA,GAAWP,GAAiBja,EAAM0a,aAAc/C,CAAAA,EAC1D6C,EAAUA,GAAW,CAACP,GAAiBja,EAAMya,WAAY9C,CAAAA,EAEvD6C,GACF1C,EAAAA,CAEJ,CAAA,EACAuC,OAAAA,EAASM,QAAQC,SAAU,CAACC,UAAW,GAAMC,QAAS,EAAI,CAAA,EACnDT,CACT,CAEA,IAAMW,GAAqB,IAAI51B,IAC3B61B,GAAsB,EAE1B,SAASC,IAAiB,CACxB,IAAMC,EAAMx0B,OAAOy0B,iBACfD,IAAQF,KAGZA,GAAsBE,EACtBH,GAAmB/0B,QAAQ,CAACo1B,EAAQ51B,IAAU,CACxCA,EAAM61B,0BAA4BH,GACpCE,EAAAA,CAEJ,CAAA,EACF,CAEA,SAASE,GAA8B91B,EAAO41B,EAAQ,CAC/CL,GAAmBntB,MACtBlH,OAAOkxB,iBAAiB,SAAUqD,EAAAA,EAEpCF,GAAmBjzB,IAAItC,EAAO41B,CAAAA,CAChC,CAEA,SAASG,GAAgC/1B,EAAO,CAC9Cu1B,GAAmBlyB,OAAOrD,CAAAA,EACrBu1B,GAAmBntB,MACtBlH,OAAOoxB,oBAAoB,SAAUmD,EAAAA,CAEzC,CAEA,SAASO,GAAqBh2B,EAAOG,EAAMkyB,EAAU,CACnD,IAAMH,EAASlyB,EAAMkyB,OACf+D,EAAY/D,GAAUgE,GAAehE,CAAAA,EAC3C,GAAI,CAAC+D,EACH,OAEF,IAAML,EAASO,GAAU,CAAC3Y,EAAOD,IAAW,CAC1C,IAAMyS,EAAIiG,EAAUG,YACpB/D,EAAS7U,EAAOD,CAAAA,EACZyS,EAAIiG,EAAUG,aAQhB/D,EAAAA,GAEDnxB,MAAAA,EAGG0zB,EAAW,IAAIyB,eAAevB,GAAW,CAC7C,IAAMva,EAAQua,EAAQ,CAAE,EAClBtX,EAAQjD,EAAM+b,YAAY9Y,MAC1BD,EAAShD,EAAM+b,YAAY/Y,OAI7BC,IAAU,GAAKD,IAAW,GAG9BqY,EAAOpY,EAAOD,CAAAA,CAChB,CAAA,EACAqX,OAAAA,EAASM,QAAQe,CAAAA,EACjBH,GAA8B91B,EAAO41B,CAAAA,EAE9BhB,CACT,CAEA,SAAS2B,GAAgBv2B,EAAOG,EAAMy0B,EAAU,CAC1CA,GACFA,EAAS4B,WAAU,EAEjBr2B,IAAS,UACX41B,GAAgC/1B,CAAAA,CAEpC,CAEA,SAASy2B,GAAqBz2B,EAAOG,EAAMkyB,EAAU,CACnD,IAAMH,EAASlyB,EAAMkyB,OACfwE,EAAQP,GAAW3zB,GAAU,CAI7BxC,EAAMiP,MAAQ,MAChBojB,EAASiC,GAAgB9xB,EAAOxC,CAAAA,CAAAA,GAEjCA,CAAAA,EAEHm0B,OAAAA,GAAYjC,EAAQ/xB,EAAMu2B,CAAAA,EAEnBA,CACT,CAMe,IAAMC,GAAN,cAA0B3E,EAAAA,CAOvCC,eAAeC,EAAQ3P,EAAa,CAIlC,IAAMlN,EAAU6c,GAAUA,EAAOvf,YAAcuf,EAAOvf,WAAW,IAAA,EASjE,OAAI0C,GAAWA,EAAQ6c,SAAWA,GAGhCsB,GAAWtB,EAAQ3P,CAAAA,EACZlN,GAGF,IACT,CAKA8c,eAAe9c,EAAS,CACtB,IAAM6c,EAAS7c,EAAQ6c,OACvB,GAAI,CAACA,EAAOU,EAAAA,EACV,MAAO,GAGT,IAAMlyB,EAAUwxB,EAAOU,EAAAA,EAAalyB,QACpC,CAAC,SAAU,SAASF,QAASgE,GAAS,CACpC,IAAM2D,EAAQzH,EAAQ8D,CAAK,EACvBsV,GAAc3R,CAAQ,EACxB+pB,EAAO0E,gBAAgBpyB,CAAAA,EAEvB0tB,EAAO2E,aAAaryB,EAAM2D,CAAAA,CAE9B,CAAA,EAEA,IAAM0a,EAAQniB,EAAQmiB,OAAS,CAAA,EAC/Bjc,cAAOC,KAAKgc,CAAAA,EAAOriB,QAAS0G,GAAQ,CAClCgrB,EAAOrP,MAAM3b,CAAAA,EAAO2b,EAAM3b,CAAI,CAChC,CAAA,EAOAgrB,EAAO1U,MAAQ0U,EAAO1U,MAEtB,OAAO0U,EAAOU,EAAY,EACnB,EACT,CAQAR,iBAAiBpyB,EAAOG,EAAMkyB,EAAU,CAEtC,KAAKC,oBAAoBtyB,EAAOG,CAAAA,EAEhC,IAAM22B,EAAU92B,EAAM+2B,WAAa/2B,EAAM+2B,SAAW,CAAA,GAM9C7L,EALW,CACf8L,OAAQrC,GACRsC,OAAQ3B,GACRM,OAAQI,EACV,EACyB71B,CAAAA,GAASs2B,GAClCK,EAAQ32B,CAAAA,EAAQ+qB,EAAQlrB,EAAOG,EAAMkyB,CAAAA,CACvC,CAOAC,oBAAoBtyB,EAAOG,EAAM,CAC/B,IAAM22B,EAAU92B,EAAM+2B,WAAa/2B,EAAM+2B,SAAW,CAAA,GAC9CL,EAAQI,EAAQ32B,CAAK,EAE3B,GAAI,CAACu2B,EACH,QAGe,CACfM,OAAQT,GACRU,OAAQV,GACRX,OAAQW,EACV,EACyBp2B,CAAAA,GAASk0B,IAC1Br0B,EAAOG,EAAMu2B,CAAAA,EACrBI,EAAQ32B,CAAAA,EAAQL,MAClB,CAEAyyB,qBAAsB,CACpB,OAAOrxB,OAAOy0B,gBAChB,CAQAnD,eAAeN,EAAQ1U,EAAOD,EAAQgF,EAAa,CACjD,OAAOiQ,GAAeN,EAAQ1U,EAAOD,EAAQgF,CAAAA,CAC/C,CAKAkQ,WAAWP,EAAQ,CACjB,IAAM+D,EAAY/D,GAAUgE,GAAehE,CAAAA,EAC3C,MAAO,CAAC,EAAE+D,GAAaA,EAAUiB,YACnC,CACF,EC/XO,SAASC,GAAgBjF,EAAQ,CACtC,MAAI,CAACkF,GAAsB,GAAA,OAAOC,gBAAoB,KAAenF,aAAkBmF,gBAC9E1E,GAEFgE,EACT,CCLe,IAAMW,GAAN,KAAMA,CAEnB,OAAOxwB,SAAW,CAAA,EAClB,OAAOywB,cAAgBz3B,OAEvBmJ,EACAC,EACAxD,OAAS,GACT+B,QACAM,YAEAyvB,gBAAgBzL,EAAkC,CAChD,GAAM,CAAC9iB,EAAAA,EAAGC,EAAAA,CAAAA,EAAK,KAAKojB,SAAS,CAAC,IAAK,KAAMP,CAAAA,EACzC,MAAO,CAAC9iB,EAAAA,EAAGC,EAAAA,CAAC,CACd,CAEAuuB,UAAW,CACT,OAAO5Q,GAAS,KAAK5d,CAAC,GAAK4d,GAAS,KAAK3d,CAAC,CAC5C,CASAojB,SAASrkB,EAAiByvB,EAAmD,CAC3E,IAAMz3B,EAAQ,KAAK8H,YACnB,GAAI,CAAC2vB,GAAS,CAACz3B,EAEb,OAAO,KAET,IAAM03B,EAA+B,CAAA,EACrC1vB,OAAAA,EAAMzH,QAASgE,GAAS,CACtBmzB,EAAInzB,CAAAA,EAAQvE,EAAMuE,CAAK,GAAIvE,EAAMuE,CAAAA,EAAMkB,OAAM,EAAKzF,EAAMuE,CAAAA,EAAMgB,IAAM,KAAKhB,CAAe,CAC1F,CAAA,EACOmzB,CACT,CACF,EC5BO,SAASC,GAASnvB,EAAO6Q,EAAO,CACrC,IAAMue,EAAWpvB,EAAMhB,QAAQ6R,MACzBwe,EAAqBC,GAAkBtvB,CAAAA,EACvCuvB,EAAap3B,KAAKC,IAAIg3B,EAASI,eAAiBH,EAAoBA,CAAAA,EACpEI,EAAeL,EAASM,MAAMC,QAAUC,GAAgB/e,CAAAA,EAAS,CAAA,EACjEgf,EAAkBJ,EAAaz2B,OAC/B82B,EAAQL,EAAa,CAAE,EACvBxa,EAAOwa,EAAaI,EAAkB,CAAE,EACxCE,EAAW,CAAA,EAGjB,GAAIF,EAAkBN,EACpBS,OAAAA,GAAWnf,EAAOkf,EAAUN,EAAcI,EAAkBN,CAAAA,EACrDQ,EAGT,IAAMtW,EAAUwW,GAAiBR,EAAc5e,EAAO0e,CAAAA,EAEtD,GAAIM,EAAkB,EAAG,CACvB,IAAI52B,EAAGuI,EACD0uB,EAAkBL,EAAkB,EAAI13B,KAAKg4B,OAAOlb,EAAO6a,IAAUD,EAAkB,EAAA,EAAM,KAEnG,IADAnY,GAAK7G,EAAOkf,EAAUtW,EAASpI,GAAc6e,CAAAA,EAAmB,EAAIJ,EAAQI,EAAiBJ,CAAAA,EACxF72B,EAAI,EAAGuI,EAAOquB,EAAkB,EAAG52B,EAAIuI,EAAMvI,IAChDye,GAAK7G,EAAOkf,EAAUtW,EAASgW,EAAax2B,CAAAA,EAAIw2B,EAAax2B,EAAI,CAAE,CAAA,EAErEye,OAAAA,GAAK7G,EAAOkf,EAAUtW,EAASxE,EAAM5D,GAAc6e,CAAAA,EAAmBrf,EAAM7X,OAASic,EAAOib,CAAe,EACpGH,EAETrY,OAAAA,GAAK7G,EAAOkf,EAAUtW,CAAAA,EACfsW,CACT,CAEA,SAAST,GAAkBtvB,EAAO,CAChC,IAAMgU,EAAShU,EAAMhB,QAAQgV,OACvBoc,EAAapwB,EAAMqwB,UAAS,EAC5BC,EAAWtwB,EAAMwQ,QAAU4f,GAAcpc,EAAS,EAAI,GACtDuc,EAAWvwB,EAAMwwB,WAAaJ,EACpC,OAAOj4B,KAAKqE,MAAMrE,KAAKC,IAAIk4B,EAAUC,CAAAA,CAAAA,CACvC,CAOA,SAASN,GAAiBR,EAAc5e,EAAO0e,EAAY,CACzD,IAAMkB,EAAmBC,GAAejB,CAAAA,EAClChW,EAAU5I,EAAM7X,OAASu2B,EAI/B,GAAI,CAACkB,EACH,OAAOt4B,KAAKoC,IAAIkf,EAAS,CAAA,EAG3B,IAAMkX,EAAUC,GAAWH,CAAAA,EAC3B,QAASx3B,EAAI,EAAGuI,EAAOmvB,EAAQ33B,OAAS,EAAGC,EAAIuI,EAAMvI,IAAK,CACxD,IAAMkC,EAASw1B,EAAQ13B,CAAE,EACzB,GAAIkC,EAASse,EACX,OAAOte,CAEX,CACA,OAAOhD,KAAKoC,IAAIkf,EAAS,CAAA,CAC3B,CAKA,SAASmW,GAAgB/e,EAAO,CAC9B,IAAMqR,EAAS,CAAA,EACXjpB,EAAGuI,EACP,IAAKvI,EAAI,EAAGuI,EAAOqP,EAAM7X,OAAQC,EAAIuI,EAAMvI,IACrC4X,EAAM5X,CAAE,EAACy2B,OACXxN,EAAOjoB,KAAKhB,CAAAA,EAGhB,OAAOipB,CACT,CAQA,SAAS8N,GAAWnf,EAAOkf,EAAUN,EAAchW,EAAS,CAC1D,IAAIpP,EAAQ,EACRsH,EAAO8d,EAAa,CAAE,EACtBx2B,EAGJ,IADAwgB,EAAUthB,KAAK04B,KAAKpX,CAAAA,EACfxgB,EAAI,EAAGA,EAAI4X,EAAM7X,OAAQC,IACxBA,IAAM0Y,IACRoe,EAAS91B,KAAK4W,EAAM5X,CAAE,CAAA,EACtBoR,IACAsH,EAAO8d,EAAaplB,EAAQoP,CAAQ,EAG1C,CASA,SAAS/B,GAAK7G,EAAOkf,EAAUtW,EAASqX,EAAYC,EAAU,CAC5D,IAAM14B,EAAQ6P,GAAe4oB,EAAY,CAAA,EACnC1wB,EAAMjI,KAAKC,IAAI8P,GAAe6oB,EAAUlgB,EAAM7X,MAAM,EAAG6X,EAAM7X,MAAM,EACrEqR,EAAQ,EACRrR,EAAQC,EAAG0Y,EAUf,IARA8H,EAAUthB,KAAK04B,KAAKpX,CAAAA,EAChBsX,IACF/3B,EAAS+3B,EAAWD,EACpBrX,EAAUzgB,EAASb,KAAKqE,MAAMxD,EAASygB,CAAAA,GAGzC9H,EAAOtZ,EAEAsZ,EAAO,GACZtH,IACAsH,EAAOxZ,KAAKg4B,MAAM93B,EAAQgS,EAAQoP,CAAAA,EAGpC,IAAKxgB,EAAId,KAAKoC,IAAIlC,EAAO,CAAIY,EAAAA,EAAImH,EAAKnH,IAChCA,IAAM0Y,IACRoe,EAAS91B,KAAK4W,EAAM5X,CAAE,CAAA,EACtBoR,IACAsH,EAAOxZ,KAAKg4B,MAAM93B,EAAQgS,EAAQoP,CAAAA,EAGxC,CAMA,SAASiX,GAAezhB,EAAK,CAC3B,IAAM+hB,EAAM/hB,EAAIjW,OACZC,EAAGioB,EAEP,GAAI8P,EAAM,EACR,MAAO,GAGT,IAAK9P,EAAOjS,EAAI,CAAE,EAAEhW,EAAI,EAAGA,EAAI+3B,EAAK,EAAE/3B,EACpC,GAAIgW,EAAIhW,CAAE,EAAGgW,EAAIhW,EAAI,CAAE,IAAKioB,EAC1B,MAAO,GAGX,OAAOA,CACT,CCjKA,IAAM+P,GAAgBC,GAAUA,IAAU,OAAS,QAAUA,IAAU,QAAU,OAASA,EACpFC,GAAiB,CAACnxB,EAAO+S,EAAMiB,IAAWjB,IAAS,OAASA,IAAS,OAAS/S,EAAM+S,CAAAA,EAAQiB,EAAShU,EAAM+S,CAAAA,EAAQiB,EACnHod,GAAgB,CAACC,EAAa7B,IAAkBr3B,KAAKC,IAAIo3B,GAAiB6B,EAAaA,CAAAA,EAY7F,SAASC,GAAOriB,EAAKsiB,EAAU,CAC7B,IAAMrP,EAAS,CAAA,EACTsP,EAAYviB,EAAIjW,OAASu4B,EACzBP,EAAM/hB,EAAIjW,OACZC,EAAI,EAER,KAAOA,EAAI+3B,EAAK/3B,GAAKu4B,EACnBtP,EAAOjoB,KAAKgV,EAAI9W,KAAKqE,MAAMvD,CAAG,CAAA,CAAA,EAEhC,OAAOipB,CACT,CAOA,SAASuP,GAAoBzxB,EAAOyB,EAAOiwB,EAAiB,CAC1D,IAAM14B,EAASgH,EAAM6Q,MAAM7X,OACrB24B,EAAax5B,KAAKC,IAAIqJ,EAAOzI,EAAS,CAAA,EACtCX,EAAQ2H,EAAMiW,YACd7V,EAAMJ,EAAMkW,UACZ0b,EAAU,KACZC,EAAY7xB,EAAM8Q,gBAAgB6gB,CAAAA,EAClC3d,EAEJ,GAAI0d,EAAAA,IACE14B,IAAW,EACbgb,EAAS7b,KAAKoC,IAAIs3B,EAAYx5B,EAAO+H,EAAMyxB,CAAAA,EAClCpwB,IAAU,EACnBuS,GAAUhU,EAAM8Q,gBAAgB,CAAA,EAAK+gB,GAAa,EAElD7d,GAAU6d,EAAY7xB,EAAM8Q,gBAAgB6gB,EAAa,CAAA,GAAM,EAEjEE,GAAaF,EAAalwB,EAAQuS,EAAS,CAACA,EAGxC6d,EAAYx5B,EAAQu5B,GAAWC,EAAYzxB,EAAMwxB,IAIvD,OAAOC,CACT,CAMA,SAASC,GAAeC,EAAQ/4B,EAAQ,CACtCowB,GAAK2I,EAAShlB,GAAU,CACtB,IAAMilB,EAAKjlB,EAAMilB,GACXC,EAAQD,EAAGh5B,OAAS,EACtBC,EACJ,GAAIg5B,EAAQj5B,EAAQ,CAClB,IAAKC,EAAI,EAAGA,EAAIg5B,EAAO,EAAEh5B,EACvB,OAAO8T,EAAM1K,KAAK2vB,EAAG/4B,CAAAA,CAAE,EAEzB+4B,EAAG5iB,OAAO,EAAG6iB,CAAAA,EAEjB,CAAA,CACF,CAKA,SAASC,GAAkBlzB,EAAS,CAClC,OAAOA,EAAQmzB,UAAYnzB,EAAQoxB,WAAa,CAClD,CAKA,SAASgC,GAAepzB,EAASqzB,EAAU,CACzC,GAAI,CAACrzB,EAAQ+f,QACX,MAAO,GAGT,IAAMuT,EAAOC,GAAOvzB,EAAQszB,KAAMD,CAAAA,EAC5B3J,EAAUO,GAAUjqB,EAAQ0pB,OAAO,EAGzC,OAFc/pB,GAAQK,EAAQqb,IAAI,EAAIrb,EAAQqb,KAAKrhB,OAAS,GAE5Cs5B,EAAKE,WAAc9J,EAAQ5T,MAC7C,CAEA,SAAS2d,GAAmBttB,EAAQnF,EAAO,CACzC,OAAOoF,GAAcD,EAAQ,CAC3BnF,MAAAA,EACAtI,KAAM,OACR,CAAA,CACF,CAEA,SAASg7B,GAAkBvtB,EAAQ1D,EAAOnI,EAAM,CAC9C,OAAO8L,GAAcD,EAAQ,CAC3B7L,KAAAA,EACAmI,MAAAA,EACA/J,KAAM,MACR,CAAA,CACF,CAEA,SAASi7B,GAAWzB,EAAO1O,EAAUriB,EAAS,CAE5C,IAAI+uB,EAAM0D,GAAmB1B,CAAAA,EAC7B,OAAI/wB,GAAYqiB,IAAa,SAAa,CAACriB,GAAWqiB,IAAa,WACjE0M,EAAM+B,GAAa/B,CAAAA,GAEdA,CACT,CAEA,SAAS2D,GAAU7yB,EAAOgU,EAAQwO,EAAU0O,EAAO,CACjD,GAAM,CAACxwB,IAAAA,EAAKG,KAAAA,EAAMD,OAAAA,EAAQD,MAAAA,EAAOpJ,MAAAA,CAAK,EAAIyI,EACpC,CAACuM,UAAAA,EAAWxH,OAAAA,CAAAA,EAAUxN,EACxBqgB,EAAW,EACXoE,EAAU8W,EAAQC,EAChBje,EAASlU,EAASF,EAClBqU,EAAQpU,EAAQE,EAEtB,GAAIb,EAAM0S,aAAY,EAAI,CAGxB,GAFAogB,EAASE,GAAe9B,EAAOrwB,EAAMF,CAAAA,EAEjC1C,GAASukB,CAAW,EAAA,CACtB,IAAMyQ,EAAiB90B,OAAOC,KAAKokB,CAAAA,EAAU,CAAE,EACzC9iB,EAAQ8iB,EAASyQ,CAAe,EACtCF,EAAShuB,EAAOkuB,CAAAA,EAAgBriB,iBAAiBlR,CAAAA,EAASoV,EAASd,OAC1DwO,IAAa,SACtBuQ,GAAUxmB,EAAU3L,OAAS2L,EAAU7L,KAAO,EAAIoU,EAASd,EAE3D+e,EAAS5B,GAAenxB,EAAOwiB,EAAUxO,CAAAA,EAE3CgI,EAAWrb,EAAQE,MACd,CACL,GAAI5C,GAASukB,CAAW,EAAA,CACtB,IAAMyQ,EAAiB90B,OAAOC,KAAKokB,CAAAA,EAAU,CAAE,EACzC9iB,EAAQ8iB,EAASyQ,CAAe,EACtCH,EAAS/tB,EAAOkuB,CAAAA,EAAgBriB,iBAAiBlR,CAAAA,EAASqV,EAAQf,OACzDwO,IAAa,SACtBsQ,GAAUvmB,EAAU1L,KAAO0L,EAAU5L,OAAS,EAAIoU,EAAQf,EAE1D8e,EAAS3B,GAAenxB,EAAOwiB,EAAUxO,CAAAA,EAE3C+e,EAASC,GAAe9B,EAAOtwB,EAAQF,CAAAA,EACvCkX,EAAW4K,IAAa,OAAS,CAACtJ,GAAUA,GAE9C,MAAO,CAAC4Z,OAAAA,EAAQC,OAAAA,EAAQ/W,SAAAA,EAAUpE,SAAAA,CAAQ,CAC5C,CAEe,IAAMsb,GAAN,MAAMA,UAAcrE,EAAAA,CAGjC93B,YAAY8E,EAAK,CACf,MAAK,EAGL,KAAKsH,GAAKtH,EAAIsH,GAEd,KAAKzL,KAAOmE,EAAInE,KAEhB,KAAKsH,QAAU3H,OAEf,KAAKmP,IAAM3K,EAAI2K,IAEf,KAAKjP,MAAQsE,EAAItE,MAIjB,KAAKmJ,IAAMrJ,OAEX,KAAKuJ,OAASvJ,OAEd,KAAKwJ,KAAOxJ,OAEZ,KAAKsJ,MAAQtJ,OAEb,KAAK0d,MAAQ1d,OAEb,KAAKyd,OAASzd,OACd,KAAK87B,SAAW,CACdtyB,KAAM,EACNF,MAAO,EACPD,IAAK,EACLE,OAAQ,CACV,EAEA,KAAKob,SAAW3kB,OAEhB,KAAK4kB,UAAY5kB,OAEjB,KAAK+7B,WAAa/7B,OAElB,KAAKg8B,cAAgBh8B,OAErB,KAAKi8B,YAAcj8B,OAEnB,KAAKk8B,aAAel8B,OAIpB,KAAKqL,KAAOrL,OAEZ,KAAKm8B,cAAgBn8B,OACrB,KAAKe,IAAMf,OACX,KAAKkD,IAAMlD,OACX,KAAKo8B,OAASp8B,OAEd,KAAKwZ,MAAQ,CAAA,EAEb,KAAK6iB,eAAiB,KAEtB,KAAKC,YAAc,KAEnB,KAAKC,YAAc,KACnB,KAAKpjB,QAAU,EACf,KAAKggB,WAAa,EAClB,KAAKqD,kBAAoB,CAAA,EAEzB,KAAK5d,YAAc5e,OAEnB,KAAK6e,UAAY7e,OACjB,KAAKsqB,eAAiB,GACtB,KAAKmS,SAAWz8B,OAChB,KAAK08B,SAAW18B,OAChB,KAAK28B,cAAgB38B,OACrB,KAAK48B,cAAgB58B,OACrB,KAAK68B,aAAe,EACpB,KAAKC,aAAe,EACpB,KAAKnkB,OAAS,CAAA,EACd,KAAKokB,kBAAoB,GACzB,KAAKhtB,SAAW/P,MAClB,CAMA0pB,KAAK/hB,EAAS,CACZ,KAAKA,QAAUA,EAAQq1B,WAAW,KAAKnqB,WAAU,CAAA,EAEjD,KAAKxH,KAAO1D,EAAQ0D,KAGpB,KAAKqxB,SAAW,KAAK3pB,MAAMpL,EAAQ5G,GAAG,EACtC,KAAK07B,SAAW,KAAK1pB,MAAMpL,EAAQzE,GAAG,EACtC,KAAK05B,cAAgB,KAAK7pB,MAAMpL,EAAQs1B,YAAY,EACpD,KAAKN,cAAgB,KAAK5pB,MAAMpL,EAAQu1B,YAAY,CACtD,CAQAnqB,MAAM3E,EAAKhE,EAAO,CAChB,OAAOgE,CACT,CAOArC,eAAgB,CACd,GAAI,CAAC2wB,SAAAA,EAAUD,SAAAA,EAAUG,cAAAA,EAAeD,cAAAA,CAAAA,EAAiB,KACzDD,OAAAA,EAAWS,GAAgBT,EAAUxwB,OAAOE,iBAAiB,EAC7DqwB,EAAWU,GAAgBV,EAAUvwB,OAAOC,iBAAiB,EAC7DywB,EAAgBO,GAAgBP,EAAe1wB,OAAOE,iBAAiB,EACvEuwB,EAAgBQ,GAAgBR,EAAezwB,OAAOC,iBAAiB,EAChE,CACLpL,IAAKo8B,GAAgBT,EAAUE,CAAAA,EAC/B15B,IAAKi6B,GAAgBV,EAAUE,CAAAA,EAC/B3wB,WAAYnB,GAAS6xB,CAAAA,EACrBzwB,WAAYpB,GAAS4xB,CAAAA,CACvB,CACF,CAQAroB,UAAUxF,EAAU,CAClB,GAAI,CAAC7N,IAAAA,EAAKmC,IAAAA,EAAK8I,WAAAA,EAAYC,WAAAA,CAAAA,EAAc,KAAKF,cAAa,EACvDkI,EAEJ,GAAIjI,GAAcC,EAChB,MAAO,CAAClL,IAAAA,EAAKmC,IAAAA,CAAG,EAGlB,IAAMk6B,EAAQ,KAAKxwB,wBAAuB,EAC1C,QAAShL,EAAI,EAAGuI,EAAOizB,EAAMz7B,OAAQC,EAAIuI,EAAM,EAAEvI,EAC/CqS,EAAQmpB,EAAMx7B,CAAE,EAACkL,WAAWsH,UAAU,KAAMxF,CAAAA,EACvC5C,IACHjL,EAAMD,KAAKC,IAAIA,EAAKkT,EAAMlT,GAAG,GAE1BkL,IACH/I,EAAMpC,KAAKoC,IAAIA,EAAK+Q,EAAM/Q,GAAG,GAKjCnC,OAAAA,EAAMkL,GAAclL,EAAMmC,EAAMA,EAAMnC,EACtCmC,EAAM8I,GAAcjL,EAAMmC,EAAMnC,EAAMmC,EAE/B,CACLnC,IAAKo8B,GAAgBp8B,EAAKo8B,GAAgBj6B,EAAKnC,CAAAA,CAAAA,EAC/CmC,IAAKi6B,GAAgBj6B,EAAKi6B,GAAgBp8B,EAAKmC,CAAAA,CAAAA,CACjD,CACF,CAOA0sB,YAAa,CACX,MAAO,CACLpmB,KAAM,KAAKyyB,aAAe,EAC1B5yB,IAAK,KAAK0yB,YAAc,EACxBzyB,MAAO,KAAK4yB,cAAgB,EAC5B3yB,OAAQ,KAAKyyB,eAAiB,CAChC,CACF,CAOAqB,UAAW,CACT,OAAO,KAAK7jB,KACd,CAKA/F,WAAY,CACV,IAAMzI,EAAO,KAAK9K,MAAM8K,KACxB,OAAO,KAAKrD,QAAQ6L,SAAW,KAAK6H,aAAY,EAAKrQ,EAAKsyB,QAAUtyB,EAAKuyB,UAAYvyB,EAAKwI,QAAU,CAAA,CACtG,CAKAgqB,cAActoB,EAAY,KAAKhV,MAAMgV,UAAW,CAE9C,OADc,KAAKonB,cAAgB,KAAKA,YAAc,KAAKmB,mBAAmBvoB,CAAS,EAEzF,CAGA8c,cAAe,CACb,KAAKrZ,OAAS,CAAA,EACd,KAAKokB,kBAAoB,EAC3B,CAMAW,cAAe,CACbv8B,GAAK,KAAKwG,QAAQ+1B,aAAc,CAAC,IAAK,CAAA,CACxC,CAUA73B,OAAO8e,EAAUC,EAAW+Y,EAAS,CACnC,GAAM,CAAC7gB,YAAAA,EAAa8gB,MAAAA,EAAOpkB,MAAOue,CAAAA,EAAY,KAAKpwB,QAC7Ck2B,EAAa9F,EAAS8F,WAG5B,KAAKH,aAAY,EAGjB,KAAK/Y,SAAWA,EAChB,KAAKC,UAAYA,EACjB,KAAKkX,SAAW6B,EAAU72B,OAAOyB,OAAO,CACtCiB,KAAM,EACNF,MAAO,EACPD,IAAK,EACLE,OAAQ,GACPo0B,CAAAA,EAEH,KAAKnkB,MAAQ,KACb,KAAK+iB,YAAc,KACnB,KAAKF,eAAiB,KACtB,KAAKC,YAAc,KAGnB,KAAKwB,oBAAmB,EACxB,KAAKC,cAAa,EAClB,KAAKC,mBAAkB,EAEvB,KAAK7E,WAAa,KAAK9d,aAAY,EAC/B,KAAKqC,MAAQigB,EAAQn0B,KAAOm0B,EAAQr0B,MACpC,KAAKmU,OAASkgB,EAAQt0B,IAAMs0B,EAAQp0B,OAGnC,KAAKwzB,oBACR,KAAKkB,iBAAgB,EACrB,KAAKC,oBAAmB,EACxB,KAAKC,gBAAe,EACpB,KAAK/B,OAASgC,GAAU,KAAMR,EAAO9gB,CAAAA,EACrC,KAAKigB,kBAAoB,IAG3B,KAAKsB,iBAAgB,EAErB,KAAK7kB,MAAQ,KAAK8kB,WAAU,GAAM,CAAA,EAGlC,KAAKC,gBAAe,EAIpB,IAAMC,EAAkBX,EAAa,KAAKrkB,MAAM7X,OAChD,KAAK88B,sBAAsBD,EAAkBvE,GAAO,KAAKzgB,MAAOqkB,CAAAA,EAAc,KAAKrkB,KAAK,EAMxF,KAAK7S,UAAS,EAGd,KAAK+3B,6BAA4B,EACjC,KAAKC,uBAAsB,EAC3B,KAAKC,4BAA2B,EAG5B7G,EAASrQ,UAAYqQ,EAASD,UAAYC,EAAS8G,SAAW,UAChE,KAAKrlB,MAAQse,GAAS,KAAM,KAAKte,KAAK,EACtC,KAAK+iB,YAAc,KACnB,KAAKuC,cAAa,GAGhBN,GAEF,KAAKC,sBAAsB,KAAKjlB,KAAK,EAGvC,KAAKulB,UAAS,EACd,KAAKC,IAAG,EACR,KAAKC,SAAQ,EAIb,KAAKC,YAAW,CAClB,CAKAv4B,WAAY,CACV,IAAIw4B,EAAgB,KAAKx3B,QAAQmB,QAC7BoW,EAAYE,EAEZ,KAAK/D,aAAY,GACnB6D,EAAa,KAAK1V,KAClB4V,EAAW,KAAK9V,QAEhB4V,EAAa,KAAK7V,IAClB+V,EAAW,KAAK7V,OAEhB41B,EAAgB,CAACA,GAEnB,KAAKvgB,YAAcM,EACnB,KAAKL,UAAYO,EACjB,KAAKkL,eAAiB6U,EACtB,KAAKhmB,QAAUiG,EAAWF,EAC1B,KAAKkgB,eAAiB,KAAKz3B,QAAQ03B,aACrC,CAEAH,aAAc,CACZ/9B,GAAK,KAAKwG,QAAQu3B,YAAa,CAAC,IAAK,CAAA,CACvC,CAIApB,qBAAsB,CACpB38B,GAAK,KAAKwG,QAAQm2B,oBAAqB,CAAC,IAAK,CAAA,CAC/C,CACAC,eAAgB,CAEV,KAAK1iB,aAAY,GAEnB,KAAKqC,MAAQ,KAAKiH,SAClB,KAAKnb,KAAO,EACZ,KAAKF,MAAQ,KAAKoU,QAElB,KAAKD,OAAS,KAAKmH,UAGnB,KAAKvb,IAAM,EACX,KAAKE,OAAS,KAAKkU,QAIrB,KAAKwe,YAAc,EACnB,KAAKF,WAAa,EAClB,KAAKG,aAAe,EACpB,KAAKF,cAAgB,CACvB,CACAgC,oBAAqB,CACnB78B,GAAK,KAAKwG,QAAQq2B,mBAAoB,CAAC,IAAK,CAAA,CAC9C,CAEAsB,WAAW3gB,EAAM,CACf,KAAKze,MAAMq/B,cAAc5gB,EAAM,KAAK9L,WAAU,CAAA,EAC9C1R,GAAK,KAAKwG,QAAQgX,CAAAA,EAAO,CAAC,IAAK,CAAA,CACjC,CAGAsf,kBAAmB,CACjB,KAAKqB,WAAW,kBAAA,CAClB,CACApB,qBAAsB,CAAA,CACtBC,iBAAkB,CAChB,KAAKmB,WAAW,iBAAA,CAClB,CAGAjB,kBAAmB,CACjB,KAAKiB,WAAW,kBAAA,CAClB,CAIAhB,YAAa,CACX,MAAO,CAAA,CACT,CACAC,iBAAkB,CAChB,KAAKe,WAAW,iBAAA,CAClB,CAEAE,6BAA8B,CAC5Br+B,GAAK,KAAKwG,QAAQ63B,4BAA6B,CAAC,IAAK,CAAA,CACvD,CAKAC,mBAAmBjmB,EAAO,CACxB,IAAMue,EAAW,KAAKpwB,QAAQ6R,MAC1B5X,EAAGuI,EAAMlI,EACb,IAAKL,EAAI,EAAGuI,EAAOqP,EAAM7X,OAAQC,EAAIuI,EAAMvI,IACzCK,EAAOuX,EAAM5X,CAAE,EACfK,EAAK2S,MAAQzT,GAAK42B,EAAS2H,SAAU,CAACz9B,EAAKoG,MAAOzG,EAAG4X,CAAM,EAAE,IAAI,CAErE,CACAmmB,4BAA6B,CAC3Bx+B,GAAK,KAAKwG,QAAQg4B,2BAA4B,CAAC,IAAK,CAAA,CACtD,CAIAjB,8BAA+B,CAC7Bv9B,GAAK,KAAKwG,QAAQ+2B,6BAA8B,CAAC,IAAK,CAAA,CACxD,CACAC,wBAAyB,CACvB,IAAMh3B,EAAU,KAAKA,QACfowB,EAAWpwB,EAAQ6R,MACnBomB,EAAW7F,GAAc,KAAKvgB,MAAM7X,OAAQgG,EAAQ6R,MAAM2e,aAAa,EACvE0H,EAAc9H,EAAS8H,aAAe,EACtCC,EAAc/H,EAAS+H,YACzB3D,EAAgB0D,EAChBE,EAAWnb,EAAWob,EAE1B,GAAI,CAAC,KAAKC,WAAU,GAAM,CAAClI,EAASrQ,SAAWmY,GAAeC,GAAeF,GAAY,GAAK,CAAC,KAAKvkB,aAAY,EAAI,CAClH,KAAK8gB,cAAgB0D,EACrB,OAGF,IAAMK,EAAa,KAAKC,eAAc,EAChCC,EAAgBF,EAAWG,OAAO3iB,MAClC4iB,EAAiBJ,EAAWK,QAAQ9iB,OAIpCkH,EAAW6b,GAAY,KAAKtgC,MAAMwd,MAAQ0iB,EAAe,EAAG,KAAKzb,QAAQ,EAC/Eob,EAAYp4B,EAAQgV,OAAS,KAAKgI,SAAWib,EAAWjb,GAAYib,EAAW,GAG3EQ,EAAgB,EAAIL,IACtBA,EAAYpb,GAAYib,GAAYj4B,EAAQgV,OAAS,GAAM,IAC3DiI,EAAY,KAAKA,UAAYiW,GAAkBlzB,EAAQiV,IAAI,EAC3Dmb,EAAS1G,QAAU0J,GAAepzB,EAAQ84B,MAAO,KAAKvgC,MAAMyH,QAAQszB,IAAI,EACxE+E,EAAmBl/B,KAAKgrB,KAAKsU,EAAgBA,EAAgBE,EAAiBA,CAAAA,EAC9EnE,EAAgBuE,GAAU5/B,KAAKC,IAC7BD,KAAK6/B,KAAKH,IAAaN,EAAWK,QAAQ9iB,OAAS,GAAKsiB,EAAW,GAAI,CAAA,CAAA,EACvEj/B,KAAK6/B,KAAKH,GAAY5b,EAAYob,EAAkB,GAAI,CAAA,CAAA,EAAMl/B,KAAK6/B,KAAKH,GAAYF,EAAiBN,EAAkB,GAAI,CAAA,CAAA,CAAA,CAAA,EAE7H7D,EAAgBr7B,KAAKoC,IAAI28B,EAAa/+B,KAAKC,IAAI++B,EAAa3D,CAAAA,CAAAA,GAG9D,KAAKA,cAAgBA,CACvB,CACAyC,6BAA8B,CAC5Bz9B,GAAK,KAAKwG,QAAQi3B,4BAA6B,CAAC,IAAK,CAAA,CACvD,CACAE,eAAgB,CAAA,CAIhBC,WAAY,CACV59B,GAAK,KAAKwG,QAAQo3B,UAAW,CAAC,IAAK,CAAA,CACrC,CACAC,KAAM,CAEJ,IAAMhX,EAAU,CACdtK,MAAO,EACPD,OAAQ,CACV,EAEM,CAACvd,MAAAA,EAAOyH,QAAS,CAAC6R,MAAOue,EAAU0I,MAAOG,EAAWhkB,KAAMikB,CAAAA,CAAS,EAAI,KACxEnZ,EAAU,KAAKuY,WAAU,EACzB5kB,EAAe,KAAKA,aAAY,EAEtC,GAAIqM,EAAS,CACX,IAAMoZ,EAAc/F,GAAe6F,EAAW1gC,EAAMyH,QAAQszB,IAAI,EAUhE,GATI5f,GACF2M,EAAQtK,MAAQ,KAAKiH,SACrBqD,EAAQvK,OAASod,GAAkBgG,CAAYC,EAAAA,IAE/C9Y,EAAQvK,OAAS,KAAKmH,UACtBoD,EAAQtK,MAAQmd,GAAkBgG,CAAYC,EAAAA,GAI5C/I,EAASrQ,SAAW,KAAKlO,MAAM7X,OAAQ,CACzC,GAAM,CAAC82B,MAAAA,EAAO7a,KAAAA,EAAMyiB,OAAAA,EAAQE,QAAAA,CAAAA,EAAW,KAAKJ,eAAc,EACpDY,EAAchJ,EAAS1G,QAAU,EACjC2P,EAAehd,GAAU,KAAKmY,aAAa,EAC3Cjb,EAAMpgB,KAAKogB,IAAI8f,CAAAA,EACf5f,EAAMtgB,KAAKsgB,IAAI4f,CAAAA,EAErB,GAAI3lB,EAAc,CAEhB,IAAM4lB,EAAclJ,EAASmJ,OAAS,EAAI9f,EAAMif,EAAO3iB,MAAQwD,EAAMqf,EAAQ9iB,OAC7EuK,EAAQvK,OAAS3c,KAAKC,IAAI,KAAK6jB,UAAWoD,EAAQvK,OAASwjB,EAAcF,CAAAA,MACpE,CAGL,IAAMI,EAAapJ,EAASmJ,OAAS,EAAIhgB,EAAMmf,EAAO3iB,MAAQ0D,EAAMmf,EAAQ9iB,OAE5EuK,EAAQtK,MAAQ5c,KAAKC,IAAI,KAAK4jB,SAAUqD,EAAQtK,MAAQyjB,EAAaJ,CAAAA,EAEvE,KAAKK,kBAAkB3I,EAAO7a,EAAMwD,EAAKF,CAAAA,GAI7C,KAAKmgB,eAAc,EAEfhmB,GACF,KAAKqC,MAAQ,KAAKvE,QAAUjZ,EAAMwd,MAAQ,KAAKoe,SAAStyB,KAAO,KAAKsyB,SAASxyB,MAC7E,KAAKmU,OAASuK,EAAQvK,SAEtB,KAAKC,MAAQsK,EAAQtK,MACrB,KAAKD,OAAS,KAAKtE,QAAUjZ,EAAMud,OAAS,KAAKqe,SAASzyB,IAAM,KAAKyyB,SAASvyB,OAElF,CAEA63B,kBAAkB3I,EAAO7a,EAAMwD,EAAKF,EAAK,CACvC,GAAM,CAAC1H,MAAO,CAACqgB,MAAAA,EAAOxI,QAAAA,CAAO,EAAGlG,SAAAA,CAAQ,EAAI,KAAKxjB,QAC3C25B,EAAY,KAAKnF,gBAAkB,EACnCoF,EAAmBpW,IAAa,OAAS,KAAK9f,OAAS,IAE7D,GAAI,KAAKgQ,aAAY,EAAI,CACvB,IAAMmmB,EAAa,KAAK/nB,gBAAgB,CAAK,EAAA,KAAKjQ,KAC5Ci4B,EAAc,KAAKn4B,MAAQ,KAAKmQ,gBAAgB,KAAKD,MAAM7X,OAAS,CAAA,EACtEs6B,EAAc,EACdC,EAAe,EAIfoF,EACEC,GACFtF,EAAc/a,EAAMuX,EAAM/a,MAC1Bwe,EAAe9a,EAAMxD,EAAKH,SAE1Bwe,EAAc7a,EAAMqX,EAAMhb,OAC1Bye,EAAehb,EAAMtD,EAAKF,OAEnBmc,IAAU,QACnBqC,EAAete,EAAKF,MACXmc,IAAU,MACnBoC,EAAcxD,EAAM/a,MACXmc,IAAU,UACnBoC,EAAcxD,EAAM/a,MAAQ,EAC5Bwe,EAAete,EAAKF,MAAQ,GAI9B,KAAKue,YAAcn7B,KAAKoC,KAAK+4B,EAAcuF,EAAanQ,GAAW,KAAK3T,OAAS,KAAKA,MAAQ8jB,GAAa,CAAA,EAC3G,KAAKtF,aAAep7B,KAAKoC,KAAKg5B,EAAeuF,EAAcpQ,GAAW,KAAK3T,OAAS,KAAKA,MAAQ+jB,GAAc,CAAA,MAC1G,CACL,IAAI1F,EAAane,EAAKH,OAAS,EAC3Bue,EAAgBvD,EAAMhb,OAAS,EAE/Boc,IAAU,SACZkC,EAAa,EACbC,EAAgBvD,EAAMhb,QACboc,IAAU,QACnBkC,EAAane,EAAKH,OAClBue,EAAgB,GAGlB,KAAKD,WAAaA,EAAa1K,EAC/B,KAAK2K,cAAgBA,EAAgB3K,EAEzC,CAMAgQ,gBAAiB,CACX,KAAKvF,WACP,KAAKA,SAAStyB,KAAO1I,KAAKoC,IAAI,KAAK+4B,YAAa,KAAKH,SAAStyB,IAAI,EAClE,KAAKsyB,SAASzyB,IAAMvI,KAAKoC,IAAI,KAAK64B,WAAY,KAAKD,SAASzyB,GAAG,EAC/D,KAAKyyB,SAASxyB,MAAQxI,KAAKoC,IAAI,KAAKg5B,aAAc,KAAKJ,SAASxyB,KAAK,EACrE,KAAKwyB,SAASvyB,OAASzI,KAAKoC,IAAI,KAAK84B,cAAe,KAAKF,SAASvyB,MAAM,EAE5E,CAEA01B,UAAW,CACT99B,GAAK,KAAKwG,QAAQs3B,SAAU,CAAC,IAAK,CAAA,CACpC,CAMA5jB,cAAe,CACb,GAAM,CAAChQ,KAAAA,EAAM8f,SAAAA,CAAAA,EAAY,KAAKxjB,QAC9B,OAAOwjB,IAAa,OAASA,IAAa,UAAY9f,IAAS,GACjE,CAIAq2B,YAAa,CACX,OAAO,KAAK/5B,QAAQmnB,QACtB,CAMA2P,sBAAsBjlB,EAAO,CAC3B,KAAKgmB,4BAA2B,EAEhC,KAAKC,mBAAmBjmB,CAAAA,EAGxB,IAAI5X,EAAGuI,EACP,IAAKvI,EAAI,EAAGuI,EAAOqP,EAAM7X,OAAQC,EAAIuI,EAAMvI,IACrCoY,GAAcR,EAAM5X,CAAE,EAACgT,KAAK,IAC9B4E,EAAMzB,OAAOnW,EAAG,CAAA,EAChBuI,IACAvI,KAIJ,KAAK+9B,2BAA0B,CACjC,CAMAQ,gBAAiB,CACf,IAAID,EAAa,KAAK3D,YAEtB,GAAI,CAAC2D,EAAY,CACf,IAAMrC,EAAa,KAAKl2B,QAAQ6R,MAAMqkB,WAClCrkB,EAAQ,KAAKA,MACbqkB,EAAarkB,EAAM7X,SACrB6X,EAAQygB,GAAOzgB,EAAOqkB,CAAAA,GAGxB,KAAKtB,YAAc2D,EAAa,KAAKyB,mBAAmBnoB,EAAOA,EAAM7X,OAAQ,KAAKgG,QAAQ6R,MAAM2e,aAAa,EAG/G,OAAO+H,CACT,CAQAyB,mBAAmBnoB,EAAO7X,EAAQw2B,EAAe,CAC/C,GAAM,CAAChpB,IAAAA,EAAKqtB,kBAAmB9B,CAAM,EAAI,KACnCkH,EAAS,CAAA,EACTC,EAAU,CAAA,EACV1H,EAAYr5B,KAAKqE,MAAMxD,EAASo4B,GAAcp4B,EAAQw2B,CAAAA,CAAAA,EACxD2J,EAAkB,EAClBC,EAAmB,EACnBngC,EAAG0pB,EAAG0W,EAAMptB,EAAOqtB,EAAUC,EAAYxsB,EAAOylB,EAAYzd,EAAOD,EAAQ0kB,EAE/E,IAAKvgC,EAAI,EAAGA,EAAID,EAAQC,GAAKu4B,EAAW,CAQtC,GAPAvlB,EAAQ4E,EAAM5X,CAAE,EAACgT,MACjBqtB,EAAW,KAAKG,wBAAwBxgC,CAAAA,EACxCuN,EAAI8rB,KAAOiH,EAAaD,EAASI,OACjC3sB,EAAQglB,EAAOwH,CAAAA,EAAcxH,EAAOwH,CAAAA,GAAe,CAACl3B,KAAM,CAAA,EAAI2vB,GAAI,CAAA,CAAE,EACpEQ,EAAa8G,EAAS9G,WACtBzd,EAAQD,EAAS,EAEb,CAACzD,GAAcpF,CAAU,GAAA,CAACtN,GAAQsN,CAAQ,EAC5C8I,EAAQ4kB,GAAanzB,EAAKuG,EAAM1K,KAAM0K,EAAMilB,GAAIjd,EAAO9I,CAAAA,EACvD6I,EAAS0d,UACA7zB,GAAQsN,CAAQ,EAEzB,IAAK0W,EAAI,EAAG0W,EAAOptB,EAAMjT,OAAQ2pB,EAAI0W,EAAM,EAAE1W,EAC3C6W,EAAqCvtB,EAAM0W,CAAE,EAEzC,CAACtR,GAAcmoB,CAAgB,GAAA,CAAC76B,GAAQ66B,CAAc,IACxDzkB,EAAQ4kB,GAAanzB,EAAKuG,EAAM1K,KAAM0K,EAAMilB,GAAIjd,EAAOykB,CAAAA,EACvD1kB,GAAU0d,GAIhByG,EAAOh/B,KAAK8a,CAAAA,EACZmkB,EAAQj/B,KAAK6a,CAAAA,EACbqkB,EAAkBhhC,KAAKoC,IAAIwa,EAAOokB,CAAAA,EAClCC,EAAmBjhC,KAAKoC,IAAIua,EAAQskB,CAAAA,CACtC,CACAtH,GAAeC,EAAQ/4B,CAAAA,EAEvB,IAAM0+B,EAASuB,EAAOzjB,QAAQ2jB,CAAAA,EACxBvB,EAAUsB,EAAQ1jB,QAAQ4jB,CAAAA,EAE1BQ,EAAWC,IAAS,CAAC9kB,MAAOkkB,EAAOY,CAAAA,GAAQ,EAAG/kB,OAAQokB,EAAQW,CAAAA,GAAQ,IAE5E,MAAO,CACL/J,MAAO8J,EAAQ,CAAA,EACf3kB,KAAM2kB,EAAQ5gC,EAAS,CAAA,EACvB0+B,OAAQkC,EAAQlC,CAAAA,EAChBE,QAASgC,EAAQhC,CAAAA,EACjBqB,OAAAA,EACAC,QAAAA,CACF,CACF,CAOAhtB,iBAAiBxM,EAAO,CACtB,OAAOA,CACT,CASAkR,iBAAiBlR,EAAO+B,EAAO,CAC7B,MAAO+J,IACT,CAQAkL,iBAAiBojB,EAAO,CAAA,CAQxBhpB,gBAAgBrP,EAAO,CACrB,IAAMoP,EAAQ,KAAKA,MACnB,OAAIpP,EAAQ,GAAKA,EAAQoP,EAAM7X,OAAS,EAC/B,KAEF,KAAK4X,iBAAiBC,EAAMpP,CAAAA,EAAO/B,KAAK,CACjD,CAQA8W,mBAAmBujB,EAAS,CACtB,KAAKpY,iBACPoY,EAAU,EAAIA,GAGhB,IAAMD,EAAQ,KAAK7jB,YAAc8jB,EAAU,KAAKvpB,QAChD,OAAOwpB,GAAY,KAAKvD,eAAiBwD,GAAY,KAAK1iC,MAAOuiC,EAAO,CAAA,EAAKA,CAAK,CACpF,CAMAI,mBAAmBJ,EAAO,CACxB,IAAMC,GAAWD,EAAQ,KAAK7jB,aAAe,KAAKzF,QAClD,OAAO,KAAKmR,eAAiB,EAAIoY,EAAUA,CAC7C,CAOAzlB,cAAe,CACb,OAAO,KAAK1D,iBAAiB,KAAKupB,aAAY,CAAA,CAChD,CAKAA,cAAe,CACb,GAAM,CAAC/hC,IAAAA,EAAKmC,IAAAA,CAAG,EAAI,KAEnB,OAAOnC,EAAM,GAAKmC,EAAM,EAAIA,EAC1BnC,EAAM,GAAKmC,EAAM,EAAInC,EACrB,CACJ,CAKA8R,WAAWzI,EAAO,CAChB,IAAMoP,EAAQ,KAAKA,OAAS,CAAA,EAE5B,GAAIpP,GAAS,GAAKA,EAAQoP,EAAM7X,OAAQ,CACtC,IAAMM,EAAOuX,EAAMpP,CAAM,EACzB,OAAOnI,EAAK8N,WACb9N,EAAK8N,SAAWsrB,GAAkB,KAAKxoB,WAAU,EAAIzI,EAAOnI,CAAI,GAEjE,OAAO,KAAK8N,WACZ,KAAKA,SAAWqrB,GAAmB,KAAKl7B,MAAM2S,WAAU,EAAI,IAAI,EAClE,CAMAmmB,WAAY,CACV,IAAM+J,EAAc,KAAKp7B,QAAQ6R,MAG3BwpB,EAAMhf,GAAU,KAAKmY,aAAa,EAClCjb,EAAMpgB,KAAKwY,IAAIxY,KAAKogB,IAAI8hB,CAAAA,CAAAA,EACxB5hB,EAAMtgB,KAAKwY,IAAIxY,KAAKsgB,IAAI4hB,CAAAA,CAAAA,EAExB9C,EAAa,KAAKC,eAAc,EAChC9O,EAAU0R,EAAYE,iBAAmB,EACzC/S,EAAIgQ,EAAaA,EAAWG,OAAO3iB,MAAQ2T,EAAU,EACrDjB,EAAI8P,EAAaA,EAAWK,QAAQ9iB,OAAS4T,EAAU,EAG7D,OAAO,KAAKhW,aAAY,EACpB+U,EAAIlP,EAAMgP,EAAI9O,EAAM8O,EAAIhP,EAAMkP,EAAIhP,EAClCgP,EAAIhP,EAAM8O,EAAIhP,EAAMkP,EAAIlP,EAAMgP,EAAI9O,CACxC,CAMA6e,YAAa,CACX,IAAMvY,EAAU,KAAK/f,QAAQ+f,QAE7B,OAAIA,IAAY,OACP,CAAC,CAACA,EAGJ,KAAK9a,wBAAuB,EAAGjL,OAAS,CACjD,CAKAuhC,sBAAsBhuB,EAAW,CAC/B,IAAM7J,EAAO,KAAKA,KACZnL,EAAQ,KAAKA,MACbyH,EAAU,KAAKA,QACf,CAACiV,KAAAA,EAAMuO,SAAAA,EAAU/D,OAAAA,CAAAA,EAAUzf,EAC3BgV,EAASC,EAAKD,OACdtB,EAAe,KAAKA,aAAY,EAEhC2e,EADQ,KAAKxgB,MACO7X,QAAUgb,EAAS,EAAI,GAC3CwmB,EAAKtI,GAAkBje,CAAAA,EACvBlb,EAAQ,CAAA,EAER0hC,EAAahc,EAAO4V,WAAW,KAAKnqB,WAAU,CAAA,EAC9CwwB,EAAYD,EAAW1b,QAAU0b,EAAW1lB,MAAQ,EACpD4lB,EAAgBD,EAAY,EAC5BE,EAAmB,SAASd,EAAO,CACvC,OAAOG,GAAY1iC,EAAOuiC,EAAOY,CAAAA,CACnC,EACIG,EAAa5hC,EAAG44B,EAAWiJ,EAC3BC,EAAKC,EAAKC,EAAKC,EAAKC,EAAIC,EAAIC,EAAIC,GAEpC,GAAI9Y,IAAa,MACfqY,EAAcD,EAAiB,KAAKh6B,MAAM,EAC1Co6B,EAAM,KAAKp6B,OAAS45B,EACpBU,EAAML,EAAcF,EACpBS,EAAKR,EAAiBruB,EAAU7L,GAAG,EAAIi6B,EACvCW,GAAK/uB,EAAU3L,eACN4hB,IAAa,SACtBqY,EAAcD,EAAiB,KAAKl6B,GAAG,EACvC06B,EAAK7uB,EAAU7L,IACf46B,GAAKV,EAAiBruB,EAAU3L,MAAM,EAAI+5B,EAC1CK,EAAMH,EAAcF,EACpBO,EAAM,KAAKx6B,IAAM85B,UACRhY,IAAa,OACtBqY,EAAcD,EAAiB,KAAKj6B,KAAK,EACzCo6B,EAAM,KAAKp6B,MAAQ65B,EACnBS,EAAMJ,EAAcF,EACpBQ,EAAKP,EAAiBruB,EAAU1L,IAAI,EAAI85B,EACxCU,EAAK9uB,EAAU5L,cACN6hB,IAAa,QACtBqY,EAAcD,EAAiB,KAAK/5B,IAAI,EACxCs6B,EAAK5uB,EAAU1L,KACfw6B,EAAKT,EAAiBruB,EAAU5L,KAAK,EAAIg6B,EACzCI,EAAMF,EAAcF,EACpBM,EAAM,KAAKp6B,KAAO25B,UACT93B,IAAS,IAAK,CACvB,GAAI8f,IAAa,SACfqY,EAAcD,GAAkBruB,EAAU7L,IAAM6L,EAAU3L,QAAU,EAAI,EAAA,UAC/D3C,GAASukB,CAAW,EAAA,CAC7B,IAAMyQ,EAAiB90B,OAAOC,KAAKokB,CAAAA,EAAU,CAAE,EACzC9iB,EAAQ8iB,EAASyQ,CAAe,EACtC4H,EAAcD,EAAiB,KAAKrjC,MAAMwN,OAAOkuB,CAAAA,EAAgBriB,iBAAiBlR,CAAAA,CAAAA,EAGpF07B,EAAK7uB,EAAU7L,IACf46B,GAAK/uB,EAAU3L,OACfo6B,EAAMH,EAAcF,EACpBO,EAAMF,EAAMR,UACH93B,IAAS,IAAK,CACvB,GAAI8f,IAAa,SACfqY,EAAcD,GAAkBruB,EAAU1L,KAAO0L,EAAU5L,OAAS,CAAA,UAC3D1C,GAASukB,CAAW,EAAA,CAC7B,IAAMyQ,EAAiB90B,OAAOC,KAAKokB,CAAAA,EAAU,CAAE,EACzC9iB,EAAQ8iB,EAASyQ,CAAe,EACtC4H,EAAcD,EAAiB,KAAKrjC,MAAMwN,OAAOkuB,CAAAA,EAAgBriB,iBAAiBlR,CAAAA,CAAAA,EAGpFq7B,EAAMF,EAAcF,EACpBM,EAAMF,EAAMP,EACZW,EAAK5uB,EAAU1L,KACfw6B,EAAK9uB,EAAU5L,MAGjB,IAAM46B,GAAQrzB,GAAelJ,EAAQ6R,MAAM2e,cAAe6B,CAAAA,EACpDmK,EAAOrjC,KAAKoC,IAAI,EAAGpC,KAAK04B,KAAKQ,EAAckK,EAAAA,CAAAA,EACjD,IAAKtiC,EAAI,EAAGA,EAAIo4B,EAAap4B,GAAKuiC,EAAM,CACtC,IAAM5uB,EAAU,KAAK1C,WAAWjR,CAAAA,EAC1BwiC,EAAcxnB,EAAKogB,WAAWznB,CAAAA,EAC9B8uB,EAAoBjd,EAAO4V,WAAWznB,CAAAA,EAEtC+N,EAAY8gB,EAAY9gB,UACxBghB,EAAYF,EAAYrgC,MACxBwgC,GAAaF,EAAkBG,MAAQ,CAAA,EACvCC,GAAmBJ,EAAkBK,WAErC3E,GAAYqE,EAAYrE,UACxB4E,GAAYP,EAAYO,UACxBC,GAAiBR,EAAYQ,gBAAkB,CAAA,EAC/CC,GAAuBT,EAAYS,qBAEzCrK,EAAYJ,GAAoB,KAAMx4B,EAAG+a,CAAAA,EAGrC6d,IAAcx6B,SAIlByjC,EAAmBb,GAAY1iC,EAAOs6B,EAAWlX,CAAAA,EAE7CjI,EACFqoB,EAAME,EAAME,EAAKE,EAAKP,EAEtBE,EAAME,EAAME,EAAKE,GAAKR,EAGxB/hC,EAAMkB,KAAK,CACT8gC,IAAAA,EACAC,IAAAA,EACAC,IAAAA,EACAC,IAAAA,EACAC,GAAAA,EACAC,GAAAA,EACAC,GAAAA,EACAC,GAAAA,GACAvmB,MAAO4F,EACPvf,MAAOugC,EACPC,WAAAA,GACAE,iBAAAA,GACA1E,UAAAA,GACA4E,UAAAA,GACAC,eAAAA,GACAC,qBAAAA,EACF,CAAA,EACF,CAEA,YAAKhI,aAAe7C,EACpB,KAAK8C,aAAe0G,EAEb9hC,CACT,CAKA+7B,mBAAmBvoB,EAAW,CAC5B,IAAM7J,EAAO,KAAKA,KACZ1D,EAAU,KAAKA,QACf,CAACwjB,SAAAA,EAAU3R,MAAOupB,CAAAA,EAAep7B,EACjC0T,EAAe,KAAKA,aAAY,EAChC7B,EAAQ,KAAKA,MACb,CAACqgB,MAAAA,EAAOiL,WAAAA,EAAYzT,QAAAA,EAAS6P,OAAAA,CAAM,EAAI6B,EACvCI,EAAKtI,GAAkBlzB,EAAQiV,IAAI,EACnCmoB,EAAiB5B,EAAK9R,EACtB2T,EAAkB9D,EAAS,CAAC7P,EAAU0T,EACtCxkB,EAAW,CAACyD,GAAU,KAAKmY,aAAa,EACxCz6B,EAAQ,CAAA,EACVE,EAAGuI,EAAMlI,EAAM2S,EAAOzL,EAAGC,EAAG67B,EAAWxC,EAAOxH,EAAME,EAAY+J,EAAWC,EAC3EC,GAAe,SAEnB,GAAIja,IAAa,MACf/hB,EAAI,KAAKG,OAASy7B,EAClBC,EAAY,KAAKI,wBAAuB,UAC/Bla,IAAa,SACtB/hB,EAAI,KAAKC,IAAM27B,EACfC,EAAY,KAAKI,wBAAuB,UAC/Bla,IAAa,OAAQ,CAC9B,IAAM0M,EAAM,KAAKyN,wBAAwBnC,CAAAA,EACzC8B,EAAYpN,EAAIoN,UAChB97B,EAAI0uB,EAAI1uB,UACCgiB,IAAa,QAAS,CAC/B,IAAM0M,EAAM,KAAKyN,wBAAwBnC,CAAAA,EACzC8B,EAAYpN,EAAIoN,UAChB97B,EAAI0uB,EAAI1uB,UACCkC,IAAS,IAAK,CACvB,GAAI8f,IAAa,SACf/hB,GAAM8L,EAAU7L,IAAM6L,EAAU3L,QAAU,EAAKw7B,UACtCn+B,GAASukB,CAAW,EAAA,CAC7B,IAAMyQ,EAAiB90B,OAAOC,KAAKokB,CAAAA,EAAU,CAAE,EACzC9iB,EAAQ8iB,EAASyQ,CAAe,EACtCxyB,EAAI,KAAKlJ,MAAMwN,OAAOkuB,CAAe,EAACriB,iBAAiBlR,CAAS08B,EAAAA,EAElEE,EAAY,KAAKI,wBAAuB,UAC/Bh6B,IAAS,IAAK,CACvB,GAAI8f,IAAa,SACfhiB,GAAM+L,EAAU1L,KAAO0L,EAAU5L,OAAS,EAAKy7B,UACtCn+B,GAASukB,CAAW,EAAA,CAC7B,IAAMyQ,EAAiB90B,OAAOC,KAAKokB,CAAAA,EAAU,CAAE,EACzC9iB,EAAQ8iB,EAASyQ,CAAe,EACtCzyB,EAAI,KAAKjJ,MAAMwN,OAAOkuB,CAAAA,EAAgBriB,iBAAiBlR,CAAAA,EAEzD48B,EAAY,KAAKK,wBAAwBnC,CAAAA,EAAI8B,UAG3C55B,IAAS,MACPwuB,IAAU,QACZuL,GAAe,MACNvL,IAAU,QACnBuL,GAAe,WAInB,IAAMlF,GAAa,KAAKC,eAAc,EACtC,IAAKv+B,EAAI,EAAGuI,EAAOqP,EAAM7X,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CAC9CK,EAAOuX,EAAM5X,CAAE,EACfgT,EAAQ3S,EAAK2S,MAEb,IAAMwvB,EAAcrB,EAAY/F,WAAW,KAAKnqB,WAAWjR,CAAAA,CAAAA,EAC3D6gC,EAAQ,KAAKhpB,gBAAgB7X,CAAAA,EAAKmhC,EAAYwC,YAC9CtK,EAAO,KAAKmH,wBAAwBxgC,CAAAA,EACpCu5B,EAAaF,EAAKE,WAClB+J,EAAY59B,GAAQsN,CAAAA,EAASA,EAAMjT,OAAS,EAC5C,IAAM6jC,EAAYN,EAAY,EACxBnhC,EAAQqgC,EAAYrgC,MACpB0hC,EAAcrB,EAAYsB,gBAC1BC,EAAcvB,EAAYwB,gBAC5BC,EAAgBZ,EAEhB5pB,GACFlS,EAAIs5B,EAEAwC,IAAc,UACZrjC,IAAMuI,EAAO,EACf07B,EAAiB,KAAKl+B,QAAQmB,QAAoB,OAAV,QAC/BlH,IAAM,EACfikC,EAAiB,KAAKl+B,QAAQmB,QAAmB,QAAT,OAExC+8B,EAAgB,UAIhB1a,IAAa,MACX2Z,IAAe,QAAUvkB,IAAa,EACxC4kB,EAAa,CAACD,EAAY/J,EAAaA,EAAa,EAC3C2J,IAAe,SACxBK,EAAa,CAACjF,GAAWK,QAAQ9iB,OAAS,EAAI+nB,EAAYrK,EAAaA,EAEvEgK,EAAa,CAACjF,GAAWK,QAAQ9iB,OAAS0d,EAAa,EAIrD2J,IAAe,QAAUvkB,IAAa,EACxC4kB,EAAahK,EAAa,EACjB2J,IAAe,SACxBK,EAAajF,GAAWK,QAAQ9iB,OAAS,EAAI+nB,EAAYrK,EAEzDgK,EAAajF,GAAWK,QAAQ9iB,OAASynB,EAAY/J,EAGrD+F,IACFiE,GAAc,IAEZ5kB,IAAa,GAAK,CAAC6jB,EAAY0B,oBACjC38B,GAAKgyB,EAAc,EAAKr6B,KAAKsgB,IAAIb,CAAAA,KAGnCnX,EAAIq5B,EACJ0C,GAAc,EAAID,GAAa/J,EAAa,GAG9C,IAAI4K,GAEJ,GAAI3B,EAAY0B,kBAAmB,CACjC,IAAME,GAAepU,GAAUwS,EAAY6B,eAAe,EACpDxoB,GAASyiB,GAAW2B,QAAQjgC,CAAE,EAC9B8b,GAAQwiB,GAAW0B,OAAOhgC,CAAE,EAE9ByH,GAAM87B,EAAaa,GAAa38B,IAChCG,GAAO,EAAIw8B,GAAax8B,KAE5B,OAAQ47B,GAAAA,CACR,IAAK,SACH/7B,IAAOoU,GAAS,EAChB,MACF,IAAK,SACHpU,IAAOoU,GACP,KAGF,CAEA,OAAQwnB,EAAAA,CACR,IAAK,SACHz7B,IAAQkU,GAAQ,EAChB,MACF,IAAK,QACHlU,IAAQkU,GACR,MACF,IAAK,QACC9b,IAAMuI,EAAO,EACfX,IAAQkU,GACC9b,EAAI,IACb4H,IAAQkU,GAAQ,GAElB,KAGF,CAEAqoB,GAAW,CACTv8B,KAAAA,GACAH,IAAAA,GACAqU,MAAOA,GAAQsoB,GAAatoB,MAC5BD,OAAQA,GAASuoB,GAAavoB,OAE9B1Z,MAAOqgC,EAAY8B,aACrB,EAGFxkC,EAAMkB,KAAK,CACTgS,MAAAA,EACAqmB,KAAAA,EACAkK,WAAAA,EACAx9B,QAAS,CACP4Y,SAAAA,EACAxc,MAAAA,EACA0hC,YAAAA,EACAE,YAAAA,EACAV,UAAWY,EACXT,aAAAA,GACAe,YAAa,CAACh9B,EAAGC,CAAE,EACnB28B,SAAAA,EACF,CACF,CAAA,CACF,CAEA,OAAOrkC,CACT,CAEA2jC,yBAA0B,CACxB,GAAM,CAACla,SAAAA,EAAU3R,MAAAA,CAAAA,EAAS,KAAK7R,QAG/B,GAFiB,CAACqc,GAAU,KAAKmY,aAAa,EAG5C,OAAOhR,IAAa,MAAQ,OAAS,QAGvC,IAAI0O,EAAQ,SAEZ,OAAIrgB,EAAMqgB,QAAU,QAClBA,EAAQ,OACCrgB,EAAMqgB,QAAU,MACzBA,EAAQ,QACCrgB,EAAMqgB,QAAU,UACzBA,EAAQ,SAGHA,CACT,CAEAyL,wBAAwBnC,EAAI,CAC1B,GAAM,CAAChY,SAAAA,EAAU3R,MAAO,CAACsrB,WAAAA,EAAY5D,OAAAA,EAAQ7P,QAAAA,CAAAA,CAAQ,EAAI,KAAK1pB,QACxDu4B,EAAa,KAAKC,eAAc,EAChC4E,EAAiB5B,EAAK9R,EACtBgP,EAASH,EAAWG,OAAO3iB,MAE7BunB,EACA97B,EAEJ,OAAIgiB,IAAa,OACX+V,GACF/3B,EAAI,KAAKG,MAAQ+nB,EAEbyT,IAAe,OACjBG,EAAY,OACHH,IAAe,UACxBG,EAAY,SACZ97B,GAAMk3B,EAAS,IAEf4E,EAAY,QACZ97B,GAAKk3B,KAGPl3B,EAAI,KAAKG,MAAQy7B,EAEbD,IAAe,OACjBG,EAAY,QACHH,IAAe,UACxBG,EAAY,SACZ97B,GAAMk3B,EAAS,IAEf4E,EAAY,OACZ97B,EAAI,KAAKK,OAGJ2hB,IAAa,QAClB+V,GACF/3B,EAAI,KAAKK,KAAO6nB,EAEZyT,IAAe,OACjBG,EAAY,QACHH,IAAe,UACxBG,EAAY,SACZ97B,GAAMk3B,EAAS,IAEf4E,EAAY,OACZ97B,GAAKk3B,KAGPl3B,EAAI,KAAKK,KAAOu7B,EAEZD,IAAe,OACjBG,EAAY,OACHH,IAAe,UACxBG,EAAY,SACZ97B,GAAKk3B,EAAS,IAEd4E,EAAY,QACZ97B,EAAI,KAAKG,QAIb27B,EAAY,QAGP,CAACA,UAAAA,EAAW97B,EAAAA,CAAC,CACtB,CAKAi9B,mBAAoB,CAClB,GAAI,KAAKz+B,QAAQ6R,MAAM0nB,OACrB,OAGF,IAAMhhC,EAAQ,KAAKA,MACbirB,EAAW,KAAKxjB,QAAQwjB,SAE9B,GAAIA,IAAa,QAAUA,IAAa,QACtC,MAAO,CAAC9hB,IAAK,EAAGG,KAAM,KAAKA,KAAMD,OAAQrJ,EAAMud,OAAQnU,MAAO,KAAKA,KAAK,EACxE,GAAI6hB,IAAa,OAASA,IAAa,SACvC,MAAO,CAAC9hB,IAAK,KAAKA,IAAKG,KAAM,EAAGD,OAAQ,KAAKA,OAAQD,MAAOpJ,EAAMwd,KAAK,CAE3E,CAKA2oB,gBAAiB,CACf,GAAM,CAACl3B,IAAAA,EAAKxH,QAAS,CAACub,gBAAAA,CAAAA,EAAkB1Z,KAAAA,EAAMH,IAAAA,EAAKqU,MAAAA,EAAOD,OAAAA,CAAM,EAAI,KAChEyF,IACF/T,EAAIm3B,KAAI,EACRn3B,EAAI8T,UAAYC,EAChB/T,EAAIo3B,SAAS/8B,EAAMH,EAAKqU,EAAOD,CAAAA,EAC/BtO,EAAIq3B,QAAO,EAEf,CAEAjnB,qBAAqBlX,EAAO,CAC1B,IAAMuU,EAAO,KAAKjV,QAAQiV,KAC1B,GAAI,CAAC,KAAKqjB,WAAU,GAAM,CAACrjB,EAAK8K,QAC9B,MAAO,GAGT,IAAMtd,EADQ,KAAKoP,MACCwR,UAAUthB,GAAKA,EAAErB,QAAUA,CAAAA,EAC/C,OAAI+B,GAAS,EACEwS,EAAKogB,WAAW,KAAKnqB,WAAWzI,CAAAA,CAAAA,EACjCkZ,UAEP,CACT,CAKAmjB,SAASvxB,EAAW,CAClB,IAAM0H,EAAO,KAAKjV,QAAQiV,KACpBzN,EAAM,KAAKA,IACXzN,EAAQ,KAAK26B,iBAAmB,KAAKA,eAAiB,KAAK6G,sBAAsBhuB,CAAS,GAC5FtT,EAAGuI,EAEDu8B,EAAW,CAACC,EAAIC,EAAI7jB,IAAU,CAC9B,CAACA,EAAMrF,OAAS,CAACqF,EAAMhf,QAG3BoL,EAAIm3B,KAAI,EACRn3B,EAAImU,UAAYP,EAAMrF,MACtBvO,EAAIgU,YAAcJ,EAAMhf,MACxBoL,EAAI03B,YAAY9jB,EAAMwhB,YAAc,CAAA,CAAE,EACtCp1B,EAAI23B,eAAiB/jB,EAAM0hB,iBAE3Bt1B,EAAI43B,UAAS,EACb53B,EAAI63B,OAAOL,EAAGx9B,EAAGw9B,EAAGv9B,CAAC,EACrB+F,EAAI83B,OAAOL,EAAGz9B,EAAGy9B,EAAGx9B,CAAC,EACrB+F,EAAI+3B,OAAM,EACV/3B,EAAIq3B,QAAO,EACb,EAEA,GAAI5pB,EAAK8K,QACP,IAAK9lB,EAAI,EAAGuI,EAAOzI,EAAMC,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CAC9C,IAAME,EAAOJ,EAAME,CAAE,EAEjBgb,EAAKuqB,iBACPT,EACE,CAACv9B,EAAGrH,EAAKgiC,GAAI16B,EAAGtH,EAAKiiC,IACrB,CAAC56B,EAAGrH,EAAKkiC,GAAI56B,EAAGtH,EAAKmiC,IACrBniC,CAAAA,EAIA8a,EAAKke,WACP4L,EACE,CAACv9B,EAAGrH,EAAK4hC,IAAKt6B,EAAGtH,EAAK6hC,KACtB,CAACx6B,EAAGrH,EAAK8hC,IAAKx6B,EAAGtH,EAAK+hC,KACtB,CACE9/B,MAAOjC,EAAK6iC,UACZjnB,MAAO5b,EAAKi+B,UACZwE,WAAYziC,EAAK8iC,eACjBH,iBAAkB3iC,EAAK+iC,oBACzB,CAAA,CAGN,CAEJ,CAKAuC,YAAa,CACX,GAAM,CAAClnC,MAAAA,EAAOiP,IAAAA,EAAKxH,QAAS,CAACyf,OAAAA,EAAQxK,KAAAA,CAAI,CAAC,EAAI,KACxCwmB,EAAahc,EAAO4V,WAAW,KAAKnqB,WAAU,CAAA,EAC9CwwB,EAAYjc,EAAOM,QAAU0b,EAAW1lB,MAAQ,EACtD,GAAI,CAAC2lB,EACH,OAEF,IAAMgE,EAAgBzqB,EAAKogB,WAAW,KAAKnqB,WAAW,CAAA,CAAA,EAAIyQ,UACpDkgB,EAAc,KAAK1G,aACrBgH,EAAIE,EAAID,EAAIE,EAEZ,KAAK5oB,aAAY,GACnByoB,EAAKlB,GAAY1iC,EAAO,KAAKsJ,KAAM65B,CAAAA,EAAaA,EAAY,EAC5DW,EAAKpB,GAAY1iC,EAAO,KAAKoJ,MAAO+9B,CAAAA,EAAiBA,EAAgB,EACrEtD,EAAKE,EAAKT,IAEVO,EAAKnB,GAAY1iC,EAAO,KAAKmJ,IAAKg6B,CAAAA,EAAaA,EAAY,EAC3DY,EAAKrB,GAAY1iC,EAAO,KAAKqJ,OAAQ89B,CAAAA,EAAiBA,EAAgB,EACtEvD,EAAKE,EAAKR,GAEZr0B,EAAIm3B,KAAI,EACRn3B,EAAImU,UAAY8f,EAAW1lB,MAC3BvO,EAAIgU,YAAcigB,EAAWr/B,MAE7BoL,EAAI43B,UAAS,EACb53B,EAAI63B,OAAOlD,EAAIC,CAAAA,EACf50B,EAAI83B,OAAOjD,EAAIC,CAAAA,EACf90B,EAAI+3B,OAAM,EAEV/3B,EAAIq3B,QAAO,CACb,CAKAc,WAAWpyB,EAAW,CAGpB,GAAI,CAFgB,KAAKvN,QAAQ6R,MAEhBkO,QACf,OAGF,IAAMvY,EAAM,KAAKA,IAEX8F,EAAO,KAAKmxB,kBAAiB,EAC/BnxB,GACFsyB,GAASp4B,EAAK8F,CAAAA,EAGhB,IAAMvT,EAAQ,KAAK87B,cAActoB,CAAAA,EACjC,QAAWpT,KAAQJ,EAAO,CACxB,IAAM8lC,EAAoB1lC,EAAK6F,QACzBs6B,EAAWngC,EAAKm5B,KAChBrmB,EAAQ9S,EAAK8S,MACbxL,EAAItH,EAAKqjC,WACfsC,GAAWt4B,EAAKyF,EAAO,EAAGxL,EAAG64B,EAAUuF,CAAAA,CACzC,CAEIvyB,GACFyyB,GAAWv4B,CAAAA,CAEf,CAKAw4B,WAAY,CACV,GAAM,CAACx4B,IAAAA,EAAKxH,QAAS,CAACwjB,SAAAA,EAAUsV,MAAAA,EAAO33B,QAAAA,CAAO,CAAC,EAAI,KAEnD,GAAI,CAAC23B,EAAM/Y,QACT,OAGF,IAAMuT,EAAOC,GAAOuF,EAAMxF,IAAI,EACxB5J,EAAUO,GAAU6O,EAAMpP,OAAO,EACjCwI,EAAQ4G,EAAM5G,MAChBld,EAASse,EAAKE,WAAa,EAE3BhQ,IAAa,UAAYA,IAAa,UAAYvkB,GAASukB,CAAW,GACxExO,GAAU0U,EAAQ9nB,OACdjC,GAAQm5B,EAAMzd,IAAI,IACpBrG,GAAUse,EAAKE,YAAcsF,EAAMzd,KAAKrhB,OAAS,KAGnDgb,GAAU0U,EAAQhoB,IAGpB,GAAM,CAACoyB,OAAAA,EAAQC,OAAAA,EAAQ/W,SAAAA,EAAUpE,SAAAA,CAAQ,EAAIib,GAAU,KAAM7e,EAAQwO,EAAU0O,CAAAA,EAE/E4N,GAAWt4B,EAAKsxB,EAAMzd,KAAM,EAAG,EAAGiY,EAAM,CACtCl3B,MAAO08B,EAAM18B,MACb4gB,SAAAA,EACApE,SAAAA,EACA0kB,UAAW3J,GAAWzB,EAAO1O,EAAUriB,CAAAA,EACvCs8B,aAAc,SACde,YAAa,CAAC1K,EAAQC,CAAO,CAC/B,CAAA,CACF,CAEA75B,KAAKqT,EAAW,CACT,KAAK+qB,WAAU,IAIpB,KAAKoG,eAAc,EACnB,KAAKI,SAASvxB,CAAAA,EACd,KAAKkyB,WAAU,EACf,KAAKO,UAAS,EACd,KAAKL,WAAWpyB,CAAAA,EAClB,CAMAqc,SAAU,CACR,IAAM1oB,EAAO,KAAKlB,QACZigC,EAAK/+B,EAAK2Q,OAAS3Q,EAAK2Q,MAAMgY,GAAK,EACnCqW,EAAKh3B,GAAehI,EAAK+T,MAAQ/T,EAAK+T,KAAK4U,EAAG,EAAC,EAC/CsW,EAAKj3B,GAAehI,EAAKue,QAAUve,EAAKue,OAAOoK,EAAG,CAAA,EAExD,MAAI,CAAC,KAAKyO,WAAU,GAAM,KAAKp+B,OAASg6B,EAAMpS,UAAU5nB,KAE/C,CAAC,CACN2vB,EAAGoW,EACH/lC,KAAOqT,GAAc,CACnB,KAAKrT,KAAKqT,CAAAA,CACZ,CACF,CAAE,EAGG,CAAC,CACNsc,EAAGqW,EACHhmC,KAAOqT,GAAc,CACnB,KAAKmxB,eAAc,EACnB,KAAKI,SAASvxB,CAAAA,EACd,KAAKyyB,UAAS,CAChB,CACF,EAAG,CACDnW,EAAGsW,EACHjmC,KAAM,IAAM,CACV,KAAKulC,WAAU,CACjB,CACF,EAAG,CACD5V,EAAGoW,EACH/lC,KAAOqT,GAAc,CACnB,KAAKoyB,WAAWpyB,CAAAA,CAClB,CACF,CAAE,CACJ,CAOAtI,wBAAwBvM,EAAM,CAC5B,IAAM+8B,EAAQ,KAAKl9B,MAAMmrB,6BAA4B,EAC/C1L,EAAS,KAAKtU,KAAO,SACrBwf,EAAS,CAAA,EACXjpB,EAAGuI,EAEP,IAAKvI,EAAI,EAAGuI,EAAOizB,EAAMz7B,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CAC9C,IAAMqJ,EAAOmyB,EAAMx7B,CAAE,EACjBqJ,EAAK0U,CAAO,IAAK,KAAK7T,KAAO,CAACzL,GAAQ4K,EAAK5K,OAASA,IACtDwqB,EAAOjoB,KAAKqI,CAAAA,CAEhB,CACA,OAAO4f,CACT,CAOAuX,wBAAwBh4B,EAAO,CAC7B,IAAMvB,EAAO,KAAKlB,QAAQ6R,MAAMwjB,WAAW,KAAKnqB,WAAWzI,CAAAA,CAAAA,EAC3D,OAAO8wB,GAAOryB,EAAKoyB,IAAI,CACzB,CAKA8M,YAAa,CACX,IAAMC,EAAW,KAAK5F,wBAAwB,CAAA,EAAGjH,WACjD,OAAQ,KAAK9f,aAAY,EAAK,KAAKqC,MAAQ,KAAKD,QAAUuqB,CAC5D,CACF,ECtqDqBC,GAAN,KAAMA,CACnBvoC,YAAYW,EAAM6nC,EAAO3e,EAAU,CACjC,KAAKlpB,KAAOA,EACZ,KAAK6nC,MAAQA,EACb,KAAK3e,SAAWA,EAChB,KAAK7nB,MAAQoF,OAAOqhC,OAAO,IAAI,CACjC,CAEAC,UAAU/nC,EAAM,CACd,OAAOyG,OAAO2iB,UAAU4e,cAAclnC,KAAK,KAAKd,KAAKopB,UAAWppB,EAAKopB,SAAS,CAChF,CAMA6e,SAASxmC,EAAM,CACb,IAAMymC,EAAQzhC,OAAO0hC,eAAe1mC,CAAAA,EAChC2mC,EAEAC,GAAkBH,CAAQ,IAE5BE,EAAc,KAAKH,SAASC,CAAAA,GAG9B,IAAM7mC,EAAQ,KAAKA,MACboK,EAAKhK,EAAKgK,GACVo8B,EAAQ,KAAKA,MAAQ,IAAMp8B,EAEjC,GAAI,CAACA,EACH,MAAM,IAAIud,MAAM,2BAA6BvnB,CAAM,EAGrD,OAAIgK,KAAMpK,IAKVA,EAAMoK,CAAAA,EAAMhK,EACZ6mC,GAAiB7mC,EAAMomC,EAAOO,CAAAA,EAC1B,KAAKlf,UACPviB,GAASuiB,SAASznB,EAAKgK,GAAIhK,EAAK2a,SAAS,GAGpCyrB,CACT,CAMA7lC,IAAIyJ,EAAI,CACN,OAAO,KAAKpK,MAAMoK,CAAG,CACvB,CAKA88B,WAAW9mC,EAAM,CACf,IAAMJ,EAAQ,KAAKA,MACboK,EAAKhK,EAAKgK,GACVo8B,EAAQ,KAAKA,MAEfp8B,KAAMpK,GACR,OAAOA,EAAMoK,CAAG,EAGdo8B,GAASp8B,KAAM9E,GAASkhC,CAAAA,IAC1B,OAAOlhC,GAASkhC,CAAM,EAACp8B,CAAG,EACtB,KAAKyd,UACP,OAAO9M,GAAU3Q,CAAG,EAG1B,CACF,EAEA,SAAS68B,GAAiB7mC,EAAMomC,EAAOO,EAAa,CAElD,IAAMI,EAAeC,GAAMhiC,OAAOqhC,OAAO,IAAI,EAAG,CAC9CM,EAAczhC,GAAS3E,IAAIomC,CAAAA,EAAe,CAAA,EAC1CzhC,GAAS3E,IAAI6lC,CAAAA,EACbpmC,EAAKkF,QACN,CAAA,EAEDA,GAASxE,IAAI0lC,EAAOW,CAAAA,EAEhB/mC,EAAK21B,eACPsR,GAAcb,EAAOpmC,EAAK21B,aAAa,EAGrC31B,EAAKugB,aACPrb,GAASgiC,SAASd,EAAOpmC,EAAKugB,WAAW,CAE7C,CAEA,SAAS0mB,GAAcb,EAAOe,EAAQ,CACpCniC,OAAOC,KAAKkiC,CAAAA,EAAQvoC,QAAQwoC,GAAY,CACtC,IAAMC,EAAgBD,EAASE,MAAM,GAAA,EAC/BC,EAAaF,EAAcjnC,IAAG,EAC9BonC,EAAc,CAACpB,CAAM,EAACpvB,OAAOqwB,CAAeI,EAAAA,KAAK,GAAA,EACjDC,EAAQP,EAAOC,CAAS,EAACE,MAAM,GAAA,EAC/BK,EAAaD,EAAMtnC,IAAG,EACtBwnC,EAAcF,EAAMD,KAAK,GAAA,EAC/BviC,GAAS2iC,MAAML,EAAaD,EAAYK,EAAaD,CAAAA,CACvD,CAAA,CACF,CAEA,SAASf,GAAkBH,EAAO,CAChC,MAAO,OAAQA,GAAS,aAAcA,CACxC,CC1GO,IAAMqB,GAAN,KAAMA,CACXlqC,aAAc,CACZ,KAAKmqC,YAAc,IAAI5B,GAAcl5B,GAAmB,WAAY,EAAI,EACxE,KAAKiG,SAAW,IAAIizB,GAAczQ,GAAS,UAAA,EAC3C,KAAK9U,QAAU,IAAIulB,GAAcnhC,OAAQ,SAAA,EACzC,KAAK4G,OAAS,IAAIu6B,GAAcpM,GAAO,QAAA,EAGvC,KAAKiO,iBAAmB,CAAC,KAAKD,YAAa,KAAKn8B,OAAQ,KAAKsH,QAAS,CACxE,CAKAnS,OAAOoV,EAAM,CACX,KAAK8xB,MAAM,WAAY9xB,CAAAA,CACzB,CAEA3U,UAAU2U,EAAM,CACd,KAAK8xB,MAAM,aAAc9xB,CAAAA,CAC3B,CAKA+xB,kBAAkB/xB,EAAM,CACtB,KAAK8xB,MAAM,WAAY9xB,EAAM,KAAK4xB,WAAW,CAC/C,CAKA15B,eAAe8H,EAAM,CACnB,KAAK8xB,MAAM,WAAY9xB,EAAM,KAAKjD,QAAQ,CAC5C,CAKAi1B,cAAchyB,EAAM,CAClB,KAAK8xB,MAAM,WAAY9xB,EAAM,KAAKyK,OAAO,CAC3C,CAKAwnB,aAAajyB,EAAM,CACjB,KAAK8xB,MAAM,WAAY9xB,EAAM,KAAKvK,MAAM,CAC1C,CAMAy8B,cAAcr+B,EAAI,CAChB,OAAO,KAAKs+B,KAAKt+B,EAAI,KAAK+9B,YAAa,YAAA,CACzC,CAMA1gB,WAAWrd,EAAI,CACb,OAAO,KAAKs+B,KAAKt+B,EAAI,KAAKkJ,SAAU,SAAA,CACtC,CAMAq1B,UAAUv+B,EAAI,CACZ,OAAO,KAAKs+B,KAAKt+B,EAAI,KAAK4W,QAAS,QAAA,CACrC,CAMA4nB,SAASx+B,EAAI,CACX,OAAO,KAAKs+B,KAAKt+B,EAAI,KAAK4B,OAAQ,OAAA,CACpC,CAKA68B,qBAAqBtyB,EAAM,CACzB,KAAK8xB,MAAM,aAAc9xB,EAAM,KAAK4xB,WAAW,CACjD,CAKAW,kBAAkBvyB,EAAM,CACtB,KAAK8xB,MAAM,aAAc9xB,EAAM,KAAKjD,QAAQ,CAC9C,CAKAy1B,iBAAiBxyB,EAAM,CACrB,KAAK8xB,MAAM,aAAc9xB,EAAM,KAAKyK,OAAO,CAC7C,CAKAgoB,gBAAgBzyB,EAAM,CACpB,KAAK8xB,MAAM,aAAc9xB,EAAM,KAAKvK,MAAM,CAC5C,CAKAq8B,MAAMzjC,EAAQ2R,EAAM0yB,EAAe,CACjC,CAAI1yB,GAAAA,GAAMvX,QAAQkqC,GAAO,CACvB,IAAMC,EAAMF,GAAiB,KAAKG,oBAAoBF,CAAAA,EAClDD,GAAiBE,EAAIzC,UAAUwC,CAASC,GAAAA,IAAQ,KAAKnoB,SAAWkoB,EAAI9+B,GACtE,KAAKi/B,MAAMzkC,EAAQukC,EAAKD,CAAAA,EAMxB7Y,GAAK6Y,EAAK9oC,GAAQ,CAOhB,IAAMkpC,EAAUL,GAAiB,KAAKG,oBAAoBhpC,CAAAA,EAC1D,KAAKipC,MAAMzkC,EAAQ0kC,EAASlpC,CAAAA,CAC9B,CAAA,CAEJ,CAAA,CACF,CAKAipC,MAAMzkC,EAAQ4iB,EAAU+hB,EAAW,CACjC,IAAMC,EAAcC,GAAY7kC,CAAAA,EAChCnF,GAAK8pC,EAAU,SAAWC,CAAAA,EAAc,CAAA,EAAID,CAAAA,EAC5C/hB,EAAS5iB,CAAAA,EAAQ2kC,CAAAA,EACjB9pC,GAAK8pC,EAAU,QAAUC,CAAAA,EAAc,CAAA,EAAID,CAAAA,CAC7C,CAKAH,oBAAoBzqC,EAAM,CACxB,QAASuB,EAAI,EAAGA,EAAI,KAAKkoC,iBAAiBnoC,OAAQC,IAAK,CACrD,IAAMipC,EAAM,KAAKf,iBAAiBloC,CAAE,EACpC,GAAIipC,EAAIzC,UAAU/nC,CAAO,EACvB,OAAOwqC,CAEX,CAEA,OAAO,KAAKnoB,OACd,CAKA0nB,KAAKt+B,EAAI6+B,EAAetqC,EAAM,CAC5B,IAAMyB,EAAO6oC,EAActoC,IAAIyJ,CAAAA,EAC/B,GAAIhK,IAAS9B,OACX,MAAM,IAAIqpB,MAAM,IAAMvd,EAAK,yBAA2BzL,EAAO,GAAK,EAEpE,OAAOyB,CACT,CAEF,EAGAonB,GAA+B,IAAI0gB,GCtKdwB,GAAN,KAAMA,CACnB1rC,aAAc,CACZ,KAAK2rC,MAAQ,CAAA,CACf,CAYAC,OAAOprC,EAAOqrC,EAAMtzB,EAAMtK,EAAQ,CAC5B49B,IAAS,eACX,KAAKF,MAAQ,KAAKG,mBAAmBtrC,EAAO,EAAI,EAChD,KAAKD,QAAQ,KAAKorC,MAAOnrC,EAAO,SAAA,GAGlC,IAAMmiB,EAAc1U,EAAS,KAAK89B,aAAavrC,CAAAA,EAAOyN,OAAOA,CAAU,EAAA,KAAK89B,aAAavrC,CAAM,EACzF2qB,EAAS,KAAK5qB,QAAQoiB,EAAaniB,EAAOqrC,EAAMtzB,CAAAA,EAEtD,OAAIszB,IAAS,iBACX,KAAKtrC,QAAQoiB,EAAaniB,EAAO,MAAA,EACjC,KAAKD,QAAQ,KAAKorC,MAAOnrC,EAAO,WAAA,GAE3B2qB,CACT,CAKA5qB,QAAQoiB,EAAaniB,EAAOqrC,EAAMtzB,EAAM,CACtCA,EAAOA,GAAQ,CAAA,EACf,QAAWyzB,KAAcrpB,EAAa,CACpC,IAAMspB,EAASD,EAAWC,OACpBrlC,EAASqlC,EAAOJ,CAAK,EACrB7c,EAAS,CAACxuB,EAAO+X,EAAMyzB,EAAW/jC,OAAQ,EAChD,GAAIikC,GAAatlC,EAAQooB,EAAQid,CAAAA,IAAY,IAAS1zB,EAAK4zB,WACzD,MAAO,EAEX,CAEA,MAAO,EACT,CAEAC,YAAa,CAMN9xB,GAAc,KAAKrB,MAAM,IAC5B,KAAKozB,UAAY,KAAKpzB,OACtB,KAAKA,OAAS3Y,OAElB,CAMAyrC,aAAavrC,EAAO,CAClB,GAAI,KAAKyY,OACP,OAAO,KAAKA,OAGd,IAAM0J,EAAc,KAAK1J,OAAS,KAAK6yB,mBAAmBtrC,CAAAA,EAE1D,YAAK8rC,oBAAoB9rC,CAAAA,EAElBmiB,CACT,CAEAmpB,mBAAmBtrC,EAAOuI,EAAK,CAC7B,IAAMjC,EAAStG,GAASA,EAAMsG,OACxBmB,EAAUkJ,GAAerK,EAAOmB,SAAWnB,EAAOmB,QAAQ+a,QAAS,CAAA,CAAC,EACpEA,EAAUupB,GAAWzlC,CAAAA,EAE3B,OAAOmB,IAAY,IAAS,CAACc,EAAM,CAAA,EAAKyjC,GAAkBhsC,EAAOwiB,EAAS/a,EAASc,CAAI,CACzF,CAMAujC,oBAAoB9rC,EAAO,CACzB,IAAMisC,EAAsB,KAAKJ,WAAa,CAAA,EACxC1pB,EAAc,KAAK1J,OACnBkR,EAAO,CAAC5Q,EAAGrP,IAAMqP,EAAEtL,OAAOxE,GAAK,CAACS,EAAEwiC,KAAKhjC,GAAKD,EAAEwiC,OAAO7/B,KAAO1C,EAAEuiC,OAAO7/B,EAAE,CAAA,EAC7E,KAAK7L,QAAQ4pB,EAAKsiB,EAAqB9pB,CAAAA,EAAcniB,EAAO,MAAA,EAC5D,KAAKD,QAAQ4pB,EAAKxH,EAAa8pB,CAAAA,EAAsBjsC,EAAO,OAAA,CAC9D,CACF,EAKA,SAAS+rC,GAAWzlC,EAAQ,CAC1B,IAAM6lC,EAAW,CAAA,EACX3pB,EAAU,CAAA,EACV3b,EAAOD,OAAOC,KAAKmiB,GAASxG,QAAQhhB,KAAK,EAC/C,QAASE,EAAI,EAAGA,EAAImF,EAAKpF,OAAQC,IAC/B8gB,EAAQ9f,KAAKsmB,GAASmhB,UAAUtjC,EAAKnF,CAAE,CAAA,CAAA,EAGzC,IAAM0qC,EAAQ9lC,EAAOkc,SAAW,CAAA,EAChC,QAAS9gB,EAAI,EAAGA,EAAI0qC,EAAM3qC,OAAQC,IAAK,CACrC,IAAM+pC,EAASW,EAAM1qC,CAAE,EAEnB8gB,EAAQvE,QAAQwtB,CAAAA,IAAY,KAC9BjpB,EAAQ9f,KAAK+oC,CAAAA,EACbU,EAASV,EAAO7/B,EAAE,EAAI,GAE1B,CAEA,MAAO,CAAC4W,QAAAA,EAAS2pB,SAAAA,CAAQ,CAC3B,CAEA,SAASE,GAAQ5kC,EAASc,EAAK,CAC7B,MAAI,CAACA,GAAOd,IAAY,GACf,KAELA,IAAY,GACP,CAAA,EAEFA,CACT,CAEA,SAASukC,GAAkBhsC,EAAO,CAACwiB,QAAAA,EAAS2pB,SAAAA,CAAQ,EAAG1kC,EAASc,EAAK,CACnE,IAAMoiB,EAAS,CAAA,EACTtV,EAAUrV,EAAM2S,WAAU,EAEhC,QAAW84B,KAAUjpB,EAAS,CAC5B,IAAM5W,EAAK6/B,EAAO7/B,GACZjD,EAAO0jC,GAAQ5kC,EAAQmE,CAAAA,EAAKrD,CAAAA,EAC9BI,IAAS,MAGbgiB,EAAOjoB,KAAK,CACV+oC,OAAAA,EACAhkC,QAAS6kC,GAAWtsC,EAAMsG,OAAQ,CAACmlC,OAAAA,EAAQW,MAAOD,EAASvgC,CAAG,CAAA,EAAGjD,EAAM0M,CAAAA,CACzE,CAAA,CACF,CAEA,OAAOsV,CACT,CAEA,SAAS2hB,GAAWhmC,EAAQ,CAACmlC,OAAAA,EAAQW,MAAAA,CAAK,EAAGzjC,EAAM0M,EAAS,CAC1D,IAAMxO,EAAOP,EAAOimC,gBAAgBd,CAAAA,EAC9Bj5B,EAASlM,EAAOmM,gBAAgB9J,EAAM9B,CAAAA,EAC5C,OAAIulC,GAASX,EAAO3kC,UAElB0L,EAAO9P,KAAK+oC,EAAO3kC,QAAQ,EAEtBR,EAAOoM,eAAeF,EAAQ6C,EAAS,CAAC,IAAK,CAElDm3B,WAAY,GACZC,UAAW,GACXC,QAAS,EACX,CAAA,CACF,CClLO,SAASC,GAAaxsC,EAAMsH,EAAS,CAC1C,IAAMmlC,EAAkB9lC,GAASyK,SAASpR,CAAAA,GAAS,CAAA,EAEnD,QADwBsH,EAAQ8J,UAAY,CAAA,GAAIpR,CAAK,GAAI,CAAA,GACnC6Q,WAAavJ,EAAQuJ,WAAa47B,EAAgB57B,WAAa,GACvF,CAEA,SAAS67B,GAA0BjhC,EAAIoF,EAAW,CAChD,IAAI7F,EAAOS,EACX,OAAIA,IAAO,UACTT,EAAO6F,EACEpF,IAAO,YAChBT,EAAO6F,IAAc,IAAM,IAAM,KAE5B7F,CACT,CAEA,SAAS2hC,GAA0B3hC,EAAM6F,EAAW,CAClD,OAAO7F,IAAS6F,EAAY,UAAY,SAC1C,CAEA,SAAS+7B,GAAcnhC,EAAI,CACzB,GAAIA,IAAO,KAAOA,IAAO,KAAOA,IAAO,IACrC,OAAOA,CAEX,CAEA,SAASohC,GAAiB/hB,EAAU,CAClC,GAAIA,IAAa,OAASA,IAAa,SACrC,MAAO,IAET,GAAIA,IAAa,QAAUA,IAAa,QACtC,MAAO,GAEX,CAEO,SAASgiB,GAAcrhC,KAAOshC,EAAc,CACjD,GAAIH,GAAcnhC,CAAK,EACrB,OAAOA,EAET,QAAWjD,KAAQukC,EAAc,CAC/B,IAAM/hC,EAAOxC,EAAKwC,MACb6hC,GAAiBrkC,EAAKsiB,QAAQ,GAC9Brf,EAAGnK,OAAS,GAAKsrC,GAAcnhC,EAAG,CAAA,EAAGuhC,YAAW,CAAA,EACrD,GAAIhiC,EACF,OAAOA,CAEX,CACA,MAAM,IAAIge,MAAM,6BAA6Bvd,CAAG,qDAAoD,CACtG,CAEA,SAASwhC,GAAmBxhC,EAAIT,EAAM2C,EAAS,CAC7C,GAAIA,EAAQ3C,EAAO,QAAA,IAAcS,EAC/B,MAAO,CAACT,KAAAA,CAAI,CAEhB,CAEA,SAASkiC,GAAyBzhC,EAAItF,EAAQ,CAC5C,GAAIA,EAAOwE,MAAQxE,EAAOwE,KAAKyG,SAAU,CACvC,IAAM+7B,EAAUhnC,EAAOwE,KAAKyG,SAAS9D,OAAQ8/B,GAAMA,EAAE78B,UAAY9E,GAAM2hC,EAAE18B,UAAYjF,CAAAA,EACrF,GAAI0hC,EAAQ7rC,OACV,OAAO2rC,GAAmBxhC,EAAI,IAAK0hC,EAAQ,CAAA,CAAE,GAAKF,GAAmBxhC,EAAI,IAAK0hC,EAAQ,CAAE,CAAA,EAG5F,MAAO,CAAA,CACT,CAEA,SAASE,GAAiBlnC,EAAQmB,EAAS,CACzC,IAAMgmC,EAAgBlxB,GAAUjW,EAAOnG,IAAI,GAAK,CAACqN,OAAQ,CAAA,CAAE,EACrDkgC,EAAejmC,EAAQ+F,QAAU,CAAA,EACjCmgC,EAAiBhB,GAAarmC,EAAOnG,KAAMsH,CAAAA,EAC3C+F,EAAS5G,OAAOqhC,OAAO,IAAI,EAGjCrhC,cAAOC,KAAK6mC,CAAAA,EAAcltC,QAAQoL,GAAM,CACtC,IAAMgiC,EAAYF,EAAa9hC,CAAG,EAClC,GAAI,CAAClF,GAASknC,CAAY,EACxB,OAAOx9B,QAAQy9B,MAAM,0CAA0CjiC,CAAAA,EAAI,EAErE,GAAIgiC,EAAUE,OACZ,OAAO19B,QAAQC,KAAK,kDAAkDzE,CAAAA,EAAI,EAE5E,IAAMT,EAAO8hC,GAAcrhC,EAAIgiC,EAAWP,GAAyBzhC,EAAItF,CAASQ,EAAAA,GAAS0G,OAAOogC,EAAUztC,IAAI,CAAC,EACzG4tC,EAAYjB,GAA0B3hC,EAAMwiC,CAAAA,EAC5CK,EAAsBP,EAAcjgC,QAAU,CAAA,EACpDA,EAAO5B,CAAAA,EAAMqiC,GAAQrnC,OAAOqhC,OAAO,IAAI,EAAG,CAAC,CAAC98B,KAAAA,CAAI,EAAGyiC,EAAWI,EAAoB7iC,CAAK,EAAE6iC,EAAoBD,CAAU,CAAC,CAAA,CAC1H,CAAA,EAGAznC,EAAOwE,KAAKyG,SAAS/Q,QAAQsN,GAAW,CACtC,IAAM3N,EAAO2N,EAAQ3N,MAAQmG,EAAOnG,KAC9B6Q,EAAYlD,EAAQkD,WAAa27B,GAAaxsC,EAAMsH,CAAAA,EAEpDumC,GADkBzxB,GAAUpc,CAAAA,GAAS,CAAA,GACCqN,QAAU,CAAA,EACtD5G,OAAOC,KAAKmnC,CAAAA,EAAqBxtC,QAAQ0tC,GAAa,CACpD,IAAM/iC,EAAO0hC,GAA0BqB,EAAWl9B,CAAAA,EAC5CpF,EAAKkC,EAAQ3C,EAAO,QAAA,GAAaA,EACvCqC,EAAO5B,CAAG,EAAG4B,EAAO5B,CAAAA,GAAOhF,OAAOqhC,OAAO,IAAI,EAC7CgG,GAAQzgC,EAAO5B,CAAAA,EAAK,CAAC,CAACT,KAAAA,CAAI,EAAGuiC,EAAa9hC,CAAG,EAAEoiC,EAAoBE,CAAU,CAAC,CAAA,CAChF,CAAA,CACF,CAAA,EAGAtnC,OAAOC,KAAK2G,CAAAA,EAAQhN,QAAQ0G,GAAO,CACjC,IAAMuB,EAAQ+E,EAAOtG,CAAI,EACzB+mC,GAAQxlC,EAAO,CAAC3B,GAAS0G,OAAO/E,EAAMtI,IAAI,EAAG2G,GAAS2B,KAAM,CAAA,CAC9D,CAAA,EAEO+E,CACT,CAEA,SAAS2gC,GAAY7nC,EAAQ,CAC3B,IAAMmB,EAAUnB,EAAOmB,UAAYnB,EAAOmB,QAAU,CAAA,GAEpDA,EAAQ+a,QAAU7R,GAAelJ,EAAQ+a,QAAS,CAAA,CAAC,EACnD/a,EAAQ+F,OAASggC,GAAiBlnC,EAAQmB,CAAAA,CAC5C,CAEA,SAAS2mC,GAAStjC,EAAM,CACtBA,OAAAA,EAAOA,GAAQ,CAAA,EACfA,EAAKyG,SAAWzG,EAAKyG,UAAY,CAAA,EACjCzG,EAAKwI,OAASxI,EAAKwI,QAAU,CAAA,EACtBxI,CACT,CAEA,SAASujC,GAAW/nC,EAAQ,CAC1BA,OAAAA,EAASA,GAAU,CAAA,EACnBA,EAAOwE,KAAOsjC,GAAS9nC,EAAOwE,IAAI,EAElCqjC,GAAY7nC,CAAAA,EAELA,CACT,CAEA,IAAMgoC,GAAW,IAAI3uC,IACf4uC,GAAa,IAAIC,IAEvB,SAASC,GAAWh5B,EAAUi5B,EAAU,CACtC,IAAI7nC,EAAOynC,GAASnsC,IAAIsT,CAAAA,EACxB,OAAK5O,IACHA,EAAO6nC,EAAAA,EACPJ,GAAShsC,IAAImT,EAAU5O,CAAAA,EACvB0nC,GAAW5rC,IAAIkE,CAAAA,GAEVA,CACT,CAEA,IAAM8nC,GAAa,CAACrsC,EAAKua,EAAK3V,IAAQ,CACpC,IAAMyB,EAAOgL,GAAiBkJ,EAAK3V,CAAAA,EAC/ByB,IAAS7I,QACXwC,EAAIK,IAAIgG,CAAAA,CAEZ,EAEqBimC,GAAN,KAAMA,CACnBpvC,YAAY8G,EAAQ,CAClB,KAAKuoC,QAAUR,GAAW/nC,CAAAA,EAC1B,KAAKwoC,YAAc,IAAInvC,IACvB,KAAKovC,eAAiB,IAAIpvC,GAC5B,CAEA,IAAIqvC,UAAW,CACb,OAAO,KAAKH,QAAQG,QACtB,CAEA,IAAI7uC,MAAO,CACT,OAAO,KAAK0uC,QAAQ1uC,IACtB,CAEA,IAAIA,KAAKA,EAAM,CACb,KAAK0uC,QAAQ1uC,KAAOA,CACtB,CAEA,IAAI2K,MAAO,CACT,OAAO,KAAK+jC,QAAQ/jC,IACtB,CAEA,IAAIA,KAAKA,EAAM,CACb,KAAK+jC,QAAQ/jC,KAAOsjC,GAAStjC,CAAAA,CAC/B,CAEA,IAAIrD,SAAU,CACZ,OAAO,KAAKonC,QAAQpnC,OACtB,CAEA,IAAIA,QAAQA,EAAS,CACnB,KAAKonC,QAAQpnC,QAAUA,CACzB,CAEA,IAAI+a,SAAU,CACZ,OAAO,KAAKqsB,QAAQrsB,OACtB,CAEA7c,QAAS,CACP,IAAMW,EAAS,KAAKuoC,QACpB,KAAKI,WAAU,EACfd,GAAY7nC,CAAAA,CACd,CAEA2oC,YAAa,CACX,KAAKH,YAAYI,MAAK,EACtB,KAAKH,eAAeG,MAAK,CAC3B,CAQA38B,iBAAiB48B,EAAa,CAC5B,OAAOV,GAAWU,EAChB,IAAM,CAAC,CACL,YAAYA,CAAAA,GACZ,EACD,CAAC,CAAA,CACN,CASAh5B,0BAA0Bg5B,EAAaj5B,EAAY,CACjD,OAAOu4B,GAAW,GAAGU,CAAAA,eAA0Bj5B,CAAAA,GAC7C,IAAM,CACJ,CACE,YAAYi5B,CAAAA,gBAA2Bj5B,CAAAA,GACvC,eAAeA,CAAAA,EAChB,EAED,CACE,YAAYi5B,CAAAA,GACZ,EACD,CACF,CAAA,CACL,CAUAv5B,wBAAwBu5B,EAAa55B,EAAa,CAChD,OAAOk5B,GAAW,GAAGU,CAAAA,IAAe55B,CAAAA,GAClC,IAAM,CAAC,CACL,YAAY45B,CAAAA,aAAwB55B,CAAAA,GACpC,YAAY45B,CAAAA,GACZ,YAAY55B,CAAAA,GACZ,EACD,CAAC,CAAA,CACN,CAOAg3B,gBAAgBd,EAAQ,CACtB,IAAM7/B,EAAK6/B,EAAO7/B,GACZzL,EAAO,KAAKA,KAClB,OAAOsuC,GAAW,GAAGtuC,CAAAA,WAAeyL,CAAAA,GAClC,IAAM,CAAC,CACL,WAAWA,CAAAA,MACR6/B,EAAO2D,wBAA0B,CAAA,CACrC,CAAC,CAAA,CACN,CAKAC,cAAcC,EAAWC,EAAY,CACnC,IAAMT,EAAc,KAAKA,YACrBt5B,EAAQs5B,EAAY3sC,IAAImtC,CAAAA,EAC5B,OAAI,CAAC95B,GAAS+5B,KACZ/5B,EAAQ,IAAI7V,IACZmvC,EAAYxsC,IAAIgtC,EAAW95B,CAAAA,GAEtBA,CACT,CAQA/C,gBAAgB68B,EAAWE,EAAUD,EAAY,CAC/C,GAAM,CAAC9nC,QAAAA,EAAStH,KAAAA,CAAI,EAAI,KAClBqV,EAAQ,KAAK65B,cAAcC,EAAWC,CAAAA,EACtChhC,EAASiH,EAAMrT,IAAIqtC,CAAAA,EACzB,GAAIjhC,EACF,OAAOA,EAGT,IAAMiE,EAAS,IAAIg8B,IAEnBgB,EAAShvC,QAAQqG,GAAQ,CACnByoC,IACF98B,EAAO7P,IAAI2sC,CAAAA,EACXzoC,EAAKrG,QAAQ0G,GAAOynC,GAAWn8B,EAAQ88B,EAAWpoC,CAAAA,CAAAA,GAEpDL,EAAKrG,QAAQ0G,GAAOynC,GAAWn8B,EAAQ/K,EAASP,CAAAA,CAAAA,EAChDL,EAAKrG,QAAQ0G,GAAOynC,GAAWn8B,EAAQ+J,GAAUpc,CAAAA,GAAS,CAAA,EAAI+G,CAAAA,CAAAA,EAC9DL,EAAKrG,QAAQ0G,GAAOynC,GAAWn8B,EAAQ1L,GAAUI,CAAAA,CAAAA,EACjDL,EAAKrG,QAAQ0G,GAAOynC,GAAWn8B,EAAQ2P,GAAajb,CAAAA,CAAAA,CACtD,CAAA,EAEA,IAAMqmB,EAAQjiB,MAAM5H,KAAK8O,CAAAA,EACzB,OAAI+a,EAAM9rB,SAAW,GACnB8rB,EAAM7qB,KAAKkE,OAAOqhC,OAAO,IAAI,CAAA,EAE3BsG,GAAW3rC,IAAI4sC,CAAW,GAC5Bh6B,EAAMlT,IAAIktC,EAAUjiB,CAAAA,EAEfA,CACT,CAMAkiB,mBAAoB,CAClB,GAAM,CAAChoC,QAAAA,EAAStH,KAAAA,CAAI,EAAI,KAExB,MAAO,CACLsH,EACA8U,GAAUpc,CAAK,GAAI,CAAA,EACnB2G,GAASyK,SAASpR,CAAK,GAAI,CAAA,EAC3B,CAACA,KAAAA,CAAI,EACL2G,GACAqb,EACD,CACH,CASApM,oBAAoBvD,EAAQsD,EAAOT,EAASQ,EAAW,CAAC,IAAK,CAC3D,IAAM8U,EAAS,CAAC9iB,QAAS,EAAI,EACvB,CAAC6nC,SAAAA,EAAUC,YAAAA,CAAW,EAAIC,GAAY,KAAKb,eAAgBv8B,EAAQqD,CAAAA,EACrEpO,EAAUioC,EACd,GAAIG,GAAYH,EAAU55B,CAAQ,EAAA,CAChC6U,EAAO9iB,QAAU,GACjBwN,EAAUy6B,GAAWz6B,CAAWA,EAAAA,EAAAA,EAAYA,EAE5C,IAAM06B,EAAc,KAAKr9B,eAAeF,EAAQ6C,EAASs6B,CAAAA,EACzDloC,EAAUuoC,GAAeN,EAAUr6B,EAAS06B,CAAAA,EAG9C,QAAWvrC,KAAQsR,EACjB6U,EAAOnmB,CAAAA,EAAQiD,EAAQjD,CAAK,EAE9B,OAAOmmB,CACT,CAQAjY,eAAeF,EAAQ6C,EAASQ,EAAW,CAAC,EAAG,EAAEo6B,EAAoB,CACnE,GAAM,CAACP,SAAAA,CAAAA,EAAYE,GAAY,KAAKb,eAAgBv8B,EAAQqD,CAAAA,EAC5D,OAAOnP,GAAS2O,CACZ26B,EAAAA,GAAeN,EAAUr6B,EAASvV,OAAWmwC,CAAAA,EAC7CP,CACN,CACF,EAEA,SAASE,GAAYM,EAAe19B,EAAQqD,EAAU,CACpD,IAAIL,EAAQ06B,EAAc/tC,IAAIqQ,CAAAA,EACzBgD,IACHA,EAAQ,IAAI7V,IACZuwC,EAAc5tC,IAAIkQ,EAAQgD,CAAAA,GAE5B,IAAMC,EAAWI,EAASwzB,KAAI,EAC1B96B,EAASiH,EAAMrT,IAAIsT,CAAAA,EACvB,OAAKlH,IAEHA,EAAS,CACPmhC,SAFeS,GAAgB39B,EAAQqD,CAAAA,EAGvC85B,YAAa95B,EAASpI,OAAO2iC,GAAK,CAACA,EAAEjD,YAAW,EAAG/e,SAAS,OAAA,CAAA,CAC9D,EACA5Y,EAAMlT,IAAImT,EAAUlH,CAAAA,GAEfA,CACT,CAEA,IAAM8hC,GAAcloC,GAASzB,GAASyB,CAAAA,GACjCvB,OAAOK,oBAAoBkB,CAAO+jC,EAAAA,KAAMhlC,GAAQ4oC,GAAW3nC,EAAMjB,CAAI,CAAA,CAAA,EAE1E,SAAS2oC,GAAYnZ,EAAO5gB,EAAO,CACjC,GAAM,CAACw6B,aAAAA,EAAcC,YAAAA,CAAW,EAAIhF,GAAa7U,CAAAA,EAEjD,QAAWlyB,KAAQsR,EAAO,CACxB,IAAM02B,EAAa8D,EAAa9rC,CAAAA,EAC1BioC,EAAY8D,EAAY/rC,CAAAA,EACxB2D,GAASskC,GAAaD,IAAe9V,EAAMlyB,CAAK,EACtD,GAAKgoC,IAAesD,GAAW3nC,CAAAA,GAAUkoC,GAAYloC,CAAK,IACpDskC,GAAarlC,GAAQe,CAAS,EAClC,MAAO,EAEX,CACA,MAAO,EACT,gBC9YMqoC,GAAkB,CAAC,MAAO,SAAU,OAAQ,QAAS,WAAY,EACvE,SAASC,GAAqBxlB,EAAU9f,EAAM,CAC5C,OAAO8f,IAAa,OAASA,IAAa,UAAaulB,GAAgBvyB,QAAQgN,CAAAA,IAAc,IAAM9f,IAAS,GAC9G,CAEA,SAASulC,GAAcC,EAAIC,EAAI,CAC7B,OAAO,SAAS73B,EAAGrP,EAAG,CACpB,OAAOqP,EAAE43B,CAAG,IAAKjnC,EAAEinC,CAAAA,EACf53B,EAAE63B,CAAAA,EAAMlnC,EAAEknC,CAAAA,EACV73B,EAAE43B,CAAG,EAAGjnC,EAAEinC,CAAG,CACnB,CACF,CAEA,SAASE,GAAqBx7B,EAAS,CACrC,IAAMrV,EAAQqV,EAAQrV,MAChB2G,EAAmB3G,EAAMyH,QAAQV,UAEvC/G,EAAMq/B,cAAc,aAAA,EACpBqM,GAAa/kC,GAAoBA,EAAiBmqC,WAAY,CAACz7B,GAAUrV,CAAAA,CAC3E,CAEA,SAAS+wC,GAAoB17B,EAAS,CACpC,IAAMrV,EAAQqV,EAAQrV,MAChB2G,EAAmB3G,EAAMyH,QAAQV,UACvC2kC,GAAa/kC,GAAoBA,EAAiBqqC,WAAY,CAAC37B,GAAUrV,CAAAA,CAC3E,CAMA,SAASixC,GAAUrvC,EAAM,CACvB,OAAIw1B,GAAAA,GAAqB,OAAOx1B,GAAS,SACvCA,EAAOuzB,SAAS+b,eAAetvC,CAAAA,EACtBA,GAAQA,EAAKH,SAEtBG,EAAOA,EAAK,CAAE,GAGZA,GAAQA,EAAKswB,SAEftwB,EAAOA,EAAKswB,QAEPtwB,CACT,CAEA,IAAMuvC,GAAY,CAAA,EACZC,GAAYlqC,GAAQ,CACxB,IAAMgrB,EAAS+e,GAAU/pC,CAAAA,EACzB,OAAON,OAAOW,OAAO4pC,EAAAA,EAAW1jC,OAAQ4jC,GAAMA,EAAEnf,SAAWA,CAAAA,EAAQlwB,IAAG,CACxE,EAEA,SAASsvC,GAAgBz0B,EAAK/b,EAAO2W,EAAM,CACzC,IAAM5Q,EAAOD,OAAOC,KAAKgW,CAAAA,EACzB,QAAW3V,KAAOL,EAAM,CACtB,IAAM0qC,EAAS,CAACrqC,EAChB,GAAIqqC,GAAUzwC,EAAO,CACnB,IAAMqH,EAAQ0U,EAAI3V,CAAI,EACtB,OAAO2V,EAAI3V,CAAI,GACXuQ,EAAO,GAAK85B,EAASzwC,KACvB+b,EAAI00B,EAAS95B,CAAAA,EAAQtP,GAG3B,CACF,CASA,SAASqpC,GAAmBjuB,EAAGkuB,EAAWC,EAAaC,EAAS,CAC9D,MAAI,CAACD,GAAenuB,EAAEpjB,OAAS,WACtB,KAELwxC,EACKF,EAEFluB,CACT,CAEA,IAAMquB,GAAN,KAAMA,CAEJ,OAAO9qC,SAAWA,GAClB,OAAOqqC,UAAYA,GACnB,OAAO50B,UAAYA,GACnB,OAAOyM,SAAWA,GAClB,OAAO6oB,QAAUA,GACjB,OAAOT,SAAWA,GAElB,OAAOhJ,YAAY5mC,EAAO,CACxBwnB,GAASrmB,IAAOnB,GAAAA,CAAAA,EAChBswC,GAAAA,CACF,CAEA,OAAOpJ,cAAclnC,EAAO,CAC1BwnB,GAAS5lB,OAAU5B,GAAAA,CAAAA,EACnBswC,GAAAA,CACF,CAGAtyC,YAAYoC,EAAMmwC,EAAY,CAC5B,IAAMzrC,EAAS,KAAKA,OAAS,IAAIsoC,GAAOmD,CAAAA,EAClCC,EAAgBf,GAAUrvC,CAAAA,EAC1BqwC,EAAgBb,GAASY,CAAAA,EAC/B,GAAIC,EACF,MAAM,IAAI9oB,MACR,4CAA+C8oB,EAAcrmC,GAAK,kDAClBqmC,EAAc/f,OAAOtmB,GAAK,kBAC1E,EAGJ,IAAMnE,EAAUnB,EAAOoM,eAAepM,EAAOmpC,kBAAiB,EAAI,KAAK98B,WAAU,CAAA,EAEjF,KAAKq8B,SAAW,IAAK1oC,EAAO0oC,UAAY7X,GAAgB6a,CAAa,GACrE,KAAKhD,SAAStc,aAAapsB,CAAAA,EAE3B,IAAM+O,EAAU,KAAK25B,SAAS/c,eAAe+f,EAAevqC,EAAQ8a,WAAW,EACzE2P,EAAS7c,GAAWA,EAAQ6c,OAC5B3U,EAAS2U,GAAUA,EAAO3U,OAC1BC,EAAQ0U,GAAUA,EAAO1U,MAqC/B,GAnCA,KAAK5R,GAAKsmC,GAAAA,EACV,KAAKjjC,IAAMoG,EACX,KAAK6c,OAASA,EACd,KAAK1U,MAAQA,EACb,KAAKD,OAASA,EACd,KAAK40B,SAAW1qC,EAIhB,KAAK2qC,aAAe,KAAK7vB,YACzB,KAAK8O,QAAU,CAAA,EACf,KAAKghB,UAAY,CAAA,EACjB,KAAKtlC,QAAUjN,OACf,KAAKguB,MAAQ,CAAA,EACb,KAAK+H,wBAA0B/1B,OAC/B,KAAKkV,UAAYlV,OACjB,KAAK+B,QAAU,CAAA,EACf,KAAKywC,WAAaxyC,OAClB,KAAKyyC,WAAa,CAAA,EAElB,KAAKC,qBAAuB1yC,OAC5B,KAAK2yC,gBAAkB,CAAA,EACvB,KAAKjlC,OAAS,CAAA,EACd,KAAKklC,SAAW,IAAIxH,GACpB,KAAKnU,SAAW,CAAA,EAChB,KAAK4b,eAAiB,CAAA,EACtB,KAAKC,SAAW,GAChB,KAAKp8B,oBAAsB1W,OAC3B,KAAK+P,SAAW/P,OAChB,KAAK+yC,UAAYC,GAASvoC,GAAQ,KAAK5E,OAAO4E,CAAO9C,EAAAA,EAAQsrC,aAAe,CAAA,EAC5E,KAAK/6B,aAAe,CAAA,EAGpBm5B,GAAU,KAAKvlC,EAAE,EAAI,KAEjB,CAACyJ,GAAW,CAAC6c,EAAQ,CAKvB9hB,QAAQy9B,MAAM,mEAAA,EACd,OAGFvqC,GAASf,OAAO,KAAM,WAAYsuC,EAAAA,EAClCvtC,GAASf,OAAO,KAAM,WAAYwuC,EAAAA,EAElC,KAAKiC,YAAW,EACZ,KAAKJ,UACP,KAAKjtC,OAAM,CAEf,CAEA,IAAI4c,aAAc,CAChB,GAAM,CAAC9a,QAAS,CAAC8a,YAAAA,EAAa0wB,oBAAAA,CAAAA,EAAsBz1B,MAAAA,EAAOD,OAAAA,EAAQ60B,aAAAA,CAAY,EAAI,KACnF,OAAKt4B,GAAcyI,CAAc,EAK7B0wB,GAAuBb,EAElBA,EAIF70B,EAASC,EAAQD,EAAS,KATxBgF,CAUX,CAEA,IAAIzX,MAAO,CACT,OAAO,KAAKxE,OAAOwE,IACrB,CAEA,IAAIA,KAAKA,EAAM,CACb,KAAKxE,OAAOwE,KAAOA,CACrB,CAEA,IAAIrD,SAAU,CACZ,OAAO,KAAK0qC,QACd,CAEA,IAAI1qC,QAAQA,EAAS,CACnB,KAAKnB,OAAOmB,QAAUA,CACxB,CAEA,IAAIuhB,UAAW,CACb,OAAOA,EACT,CAKAgqB,aAAc,CAEZ,YAAK3T,cAAc,YAAA,EAEf,KAAK53B,QAAQyrC,WACf,KAAKtd,OAAM,EAEXud,GAAY,KAAM,KAAK1rC,QAAQkuB,gBAAgB,EAGjD,KAAKyd,WAAU,EAGf,KAAK/T,cAAc,WAAA,EAEZ,IACT,CAEA6P,OAAQ,CACNmE,OAAAA,GAAY,KAAKnhB,OAAQ,KAAKjjB,GAAG,EAC1B,IACT,CAEA/L,MAAO,CACLI,OAAAA,GAASJ,KAAK,IAAI,EACX,IACT,CAOA0yB,OAAOpY,EAAOD,EAAQ,CACfja,GAAS/B,QAAQ,IAAI,EAGxB,KAAK+xC,kBAAoB,CAAC91B,MAAAA,EAAOD,OAAAA,CAAM,EAFvC,KAAKg2B,QAAQ/1B,EAAOD,CAAAA,CAIxB,CAEAg2B,QAAQ/1B,EAAOD,EAAQ,CACrB,IAAM9V,EAAU,KAAKA,QACfyqB,EAAS,KAAKA,OACd3P,EAAc9a,EAAQwrC,qBAAuB,KAAK1wB,YAClDixB,EAAU,KAAKxE,SAASxc,eAAeN,EAAQ1U,EAAOD,EAAQgF,CAAAA,EAC9DkxB,EAAWhsC,EAAQkuB,kBAAoB,KAAKqZ,SAASzc,oBAAmB,EACxEhoB,EAAO,KAAKiT,MAAQ,SAAW,SAErC,KAAKA,MAAQg2B,EAAQh2B,MACrB,KAAKD,OAASi2B,EAAQj2B,OACtB,KAAK60B,aAAe,KAAK7vB,YACpB4wB,GAAY,KAAMM,EAAU,EAAI,IAIrC,KAAKpU,cAAc,SAAU,CAACj3B,KAAMorC,CAAO,CAAA,EAE3C9H,GAAajkC,EAAQisC,SAAU,CAAC,KAAMF,CAAQ,EAAE,IAAI,EAEhD,KAAKZ,UACH,KAAKC,UAAUtoC,CAAO,GAExB,KAAKopC,OAAM,EAGjB,CAEAC,qBAAsB,CAEpB,IAAMC,EADU,KAAKpsC,QACS+F,QAAU,CAAA,EAExCqkB,GAAKgiB,EAAe,CAACC,EAAar0B,IAAW,CAC3Cq0B,EAAYloC,GAAK6T,CACnB,CAAA,CACF,CAKAs0B,qBAAsB,CACpB,IAAMtsC,EAAU,KAAKA,QACfusC,EAAYvsC,EAAQ+F,OACpBA,EAAS,KAAKA,OACdymC,EAAUrtC,OAAOC,KAAK2G,CAAAA,EAAQ3K,OAAO,CAACga,EAAKjR,KAC/CiR,EAAIjR,CAAG,EAAG,GACHiR,GACN,CAAA,CAAC,EACArb,EAAQ,CAAA,EAERwyC,IACFxyC,EAAQA,EAAMoX,OACZhS,OAAOC,KAAKmtC,CAAWpxB,EAAAA,IAAKhX,GAAO,CACjC,IAAMshC,EAAe8G,EAAUpoC,CAAG,EAC5BT,EAAO8hC,GAAcrhC,EAAIshC,CAAAA,EACzBgH,EAAW/oC,IAAS,IACpBgQ,EAAehQ,IAAS,IAC9B,MAAO,CACL1D,QAASylC,EACTiH,UAAWD,EAAW,YAAc/4B,EAAe,SAAW,OAC9Di5B,MAAOF,EAAW,eAAiB/4B,EAAe,WAAa,QACjE,CACF,CAAA,CAAA,GAIJ0W,GAAKrwB,EAAQI,GAAS,CACpB,IAAMsrC,EAAetrC,EAAK6F,QACpBmE,EAAKshC,EAAathC,GAClBT,EAAO8hC,GAAcrhC,EAAIshC,CAAAA,EACzBmH,EAAY1jC,GAAeu8B,EAAa/sC,KAAMyB,EAAKwyC,KAAK,GAE1DlH,EAAajiB,WAAanrB,QAAa2wC,GAAqBvD,EAAajiB,SAAU9f,CAAUslC,IAAAA,GAAqB7uC,EAAKuyC,SAAS,KAClIjH,EAAajiB,SAAWrpB,EAAKuyC,WAG/BF,EAAQroC,CAAG,EAAG,GACd,IAAInD,EAAQ,KACZ,GAAImD,KAAM4B,GAAUA,EAAO5B,CAAAA,EAAIzL,OAASk0C,EACtC5rC,EAAQ+E,EAAO5B,CAAG,MACb,CACL,IAAM0oC,EAAatrB,GAASohB,SAASiK,CAAAA,EACrC5rC,EAAQ,IAAI6rC,EAAW,CACrB1oC,GAAAA,EACAzL,KAAMk0C,EACNplC,IAAK,KAAKA,IACVjP,MAAO,IACT,CAAA,EACAwN,EAAO/E,EAAMmD,EAAE,EAAInD,EAGrBA,EAAM+gB,KAAK0jB,EAAczlC,CAAAA,CAC3B,CAAA,EAEAoqB,GAAKoiB,EAAS,CAACM,EAAY3oC,IAAO,CAC3B2oC,GACH,OAAO/mC,EAAO5B,CAAG,CAErB,CAAA,EAEAimB,GAAKrkB,EAAS/E,GAAU,CACtBylB,GAAQznB,UAAU,KAAMgC,EAAOA,EAAMhB,OAAO,EAC5CymB,GAAQkD,OAAO,KAAM3oB,CAAAA,CACvB,CAAA,CACF,CAKA+rC,iBAAkB,CAChB,IAAMzqC,EAAW,KAAKsoC,UAChB/6B,EAAU,KAAKxM,KAAKyG,SAAS9P,OAC7B4V,EAAUtN,EAAStI,OAGzB,GADAsI,EAAS+O,KAAK,CAACC,EAAGrP,IAAMqP,EAAE7O,MAAQR,EAAEQ,KAAK,EACrCmN,EAAUC,EAAS,CACrB,QAAS5V,EAAI4V,EAAS5V,EAAI2V,EAAS,EAAE3V,EACnC,KAAK+yC,oBAAoB/yC,CAAAA,EAE3BqI,EAAS8N,OAAOP,EAASD,EAAUC,CAAAA,EAErC,KAAKm7B,gBAAkB1oC,EAAS8gB,MAAM,CAAG/R,EAAAA,KAAK43B,GAAc,QAAS,OAAA,CAAA,CACvE,CAKAgE,6BAA8B,CAC5B,GAAM,CAACrC,UAAWtoC,EAAUe,KAAM,CAACyG,SAAAA,CAAAA,CAAS,EAAI,KAC5CxH,EAAStI,OAAS8P,EAAS9P,QAC7B,OAAO,KAAKsL,QAEdhD,EAASvJ,QAAQ,CAACuK,EAAMb,IAAU,CAC5BqH,EAAS9D,OAAOxE,GAAKA,IAAM8B,EAAKqb,QAAQ,EAAE3kB,SAAW,GACvD,KAAKgzC,oBAAoBvqC,CAAAA,CAE7B,CAAA,CACF,CAEAyqC,0BAA2B,CACzB,IAAMC,EAAiB,CAAA,EACjBrjC,EAAW,KAAKzG,KAAKyG,SACvB7P,EAAGuI,EAIP,IAFA,KAAKyqC,4BAA2B,EAE3BhzC,EAAI,EAAGuI,EAAOsH,EAAS9P,OAAQC,EAAIuI,EAAMvI,IAAK,CACjD,IAAMoM,EAAUyD,EAAS7P,CAAE,EACvBqJ,EAAO,KAAKyG,eAAe9P,CAAAA,EACzBvB,EAAO2N,EAAQ3N,MAAQ,KAAKmG,OAAOnG,KAazC,GAXI4K,EAAK5K,MAAQ4K,EAAK5K,OAASA,IAC7B,KAAKs0C,oBAAoB/yC,CAAAA,EACzBqJ,EAAO,KAAKyG,eAAe9P,CAAAA,GAE7BqJ,EAAK5K,KAAOA,EACZ4K,EAAKiG,UAAYlD,EAAQkD,WAAa27B,GAAaxsC,EAAM,KAAKsH,OAAO,EACrEsD,EAAK8pC,MAAQ/mC,EAAQ+mC,OAAS,EAC9B9pC,EAAKb,MAAQxI,EACbqJ,EAAK2J,MAAQ,GAAK5G,EAAQ4G,MAC1B3J,EAAK+pC,QAAU,KAAK7wB,iBAAiBviB,CAAAA,EAEjCqJ,EAAK6B,WACP7B,EAAK6B,WAAW0D,YAAY5O,CAAAA,EAC5BqJ,EAAK6B,WAAWoD,WAAU,MACrB,CACL,IAAM+kC,EAAkB/rB,GAASihB,cAAc9pC,CAAAA,EACzC,CAAC2O,mBAAAA,EAAoBC,gBAAAA,CAAAA,EAAmBjI,GAASyK,SAASpR,CAAK,EACrEyG,OAAOyB,OAAO0sC,EAAiB,CAC7BhmC,gBAAiBia,GAASC,WAAWla,CAAAA,EACrCD,mBAAoBA,GAAsBka,GAASC,WAAWna,CAAAA,CAChE,CAAA,EACA/D,EAAK6B,WAAa,IAAImoC,EAAgB,KAAMrzC,CAAAA,EAC5CkzC,EAAelyC,KAAKqI,EAAK6B,UAAU,EAEvC,CAEA,YAAK4nC,gBAAe,EACbI,CACT,CAMAI,gBAAiB,CACfnjB,GAAK,KAAK/mB,KAAKyG,SAAU,CAACzD,EAAStD,IAAiB,CAClD,KAAKgH,eAAehH,CAAcoC,EAAAA,WAAW+E,MAAK,CACpD,EAAG,IAAI,CACT,CAKAA,OAAQ,CACN,KAAKqjC,eAAc,EACnB,KAAK3V,cAAc,OAAA,CACrB,CAEA15B,OAAO4E,EAAM,CACX,IAAMjE,EAAS,KAAKA,OAEpBA,EAAOX,OAAM,EACb,IAAM8B,EAAU,KAAK0qC,SAAW7rC,EAAOoM,eAAepM,EAAOmpC,kBAAiB,EAAI,KAAK98B,WAAU,CAAA,EAC3FsiC,EAAgB,KAAKz+B,oBAAsB,CAAC/O,EAAQV,UAU1D,GARA,KAAKmuC,cAAa,EAClB,KAAKC,oBAAmB,EACxB,KAAKC,qBAAoB,EAIzB,KAAK1C,SAAS9G,WAAU,EAEpB,KAAKvM,cAAc,eAAgB,CAAC90B,KAAAA,EAAMohC,WAAY,EAAI,CAAA,IAAO,GACnE,OAIF,IAAMiJ,EAAiB,KAAKD,yBAAwB,EAEpD,KAAKtV,cAAc,sBAAA,EAGnB,IAAI5N,EAAa,EACjB,QAAS/vB,EAAI,EAAGuI,EAAO,KAAKa,KAAKyG,SAAS9P,OAAQC,EAAIuI,EAAMvI,IAAK,CAC/D,GAAM,CAACkL,WAAAA,CAAU,EAAI,KAAK4E,eAAe9P,CAAAA,EACnCiQ,EAAQ,CAACsjC,GAAiBL,EAAe32B,QAAQrR,CAAAA,IAAgB,GAGvEA,EAAWqF,sBAAsBN,CAAAA,EACjC8f,EAAa7wB,KAAKoC,IAAI,CAAC4J,EAAW4H,eAAc,EAAIid,CAAAA,CACtD,CACAA,EAAa,KAAK4jB,YAAc5tC,EAAQknB,OAAO2mB,YAAc7jB,EAAa,EAC1E,KAAK8jB,cAAc9jB,CAAAA,EAGdwjB,GAGHpjB,GAAK+iB,EAAiBhoC,GAAe,CACnCA,EAAW+E,MAAK,CAClB,CAAA,EAGF,KAAK6jC,gBAAgBjrC,CAAAA,EAGrB,KAAK80B,cAAc,cAAe,CAAC90B,KAAAA,CAAI,CAAA,EAEvC,KAAK8mB,QAAQvY,KAAK43B,GAAc,IAAK,MAAA,CAAA,EAGrC,GAAM,CAAC7uC,QAAAA,EAASywC,WAAAA,CAAU,EAAI,KAC1BA,EACF,KAAKmD,cAAcnD,EAAY,EAAI,EAC1BzwC,EAAQJ,QACjB,KAAKi0C,mBAAmB7zC,EAASA,EAAS,EAAI,EAGhD,KAAK8xC,OAAM,CACb,CAKAuB,eAAgB,CACdrjB,GAAK,KAAKrkB,OAAS/E,GAAU,CAC3BylB,GAAQqD,UAAU,KAAM9oB,CAAAA,CAC1B,CAAA,EAEA,KAAKmrC,oBAAmB,EACxB,KAAKG,oBAAmB,CAC1B,CAKAoB,qBAAsB,CACpB,IAAM1tC,EAAU,KAAKA,QACfkuC,EAAiB,IAAInH,IAAI5nC,OAAOC,KAAK,KAAK0rC,UAAU,CAAA,EACpDqD,EAAY,IAAIpH,IAAI/mC,EAAQouC,MAAM,GAEpC,CAACC,GAAUH,EAAgBC,CAAAA,GAAc,CAAC,CAAC,KAAKpD,uBAAyB/qC,EAAQyrC,cAEnF,KAAK6C,aAAY,EACjB,KAAK3C,WAAU,EAEnB,CAKAgC,sBAAuB,CACrB,GAAM,CAACzC,eAAAA,CAAAA,EAAkB,KACnBqD,EAAU,KAAKC,uBAAsB,GAAM,CAAA,EACjD,OAAW,CAAC7vC,OAAAA,EAAQtF,MAAAA,EAAOgS,MAAAA,CAAAA,IAAUkjC,EAAS,CAC5C,IAAMv+B,EAAOrR,IAAW,kBAAoB,CAAC0M,EAAQA,EACrDw+B,GAAgBqB,EAAgB7xC,EAAO2W,CAAAA,CACzC,CACF,CAKAw+B,wBAAyB,CACvB,IAAMj+B,EAAe,KAAKA,aAC1B,GAAI,CAACA,GAAgB,CAACA,EAAavW,OACjC,OAGF,KAAKuW,aAAe,CAAA,EACpB,IAAMk+B,EAAe,KAAKprC,KAAKyG,SAAS9P,OAClC00C,EAAW7T,GAAQ,IAAIkM,IAC3Bx2B,EACGvK,OAAO4jC,GAAKA,EAAE,CAAA,IAAO/O,CAAAA,EACrB1f,IAAI,CAACyuB,EAAG3vC,IAAMA,EAAI,IAAM2vC,EAAEx5B,OAAO,CAAGwxB,EAAAA,KAAK,GAAA,CAAA,CAAA,EAGxC+M,EAAYD,EAAQ,CAAA,EAC1B,QAASz0C,EAAI,EAAGA,EAAIw0C,EAAcx0C,IAChC,GAAI,CAACo0C,GAAUM,EAAWD,EAAQz0C,CAAK,CAAA,EACrC,OAGJ,OAAO4J,MAAM5H,KAAK0yC,CACfxzB,EAAAA,IAAIyuB,GAAKA,EAAEnI,MAAM,GACjBtmB,CAAAA,EAAAA,IAAI7J,IAAM,CAAC3S,OAAQ2S,EAAE,CAAE,EAAEjY,MAAO,CAACiY,EAAE,CAAE,EAAEjG,MAAO,CAACiG,EAAE,CAAE,GAAA,CACxD,CAOAw8B,cAAc9jB,EAAY,CACxB,GAAI,KAAK4N,cAAc,eAAgB,CAACsM,WAAY,EAAI,CAAA,IAAO,GAC7D,OAGFzd,GAAQvoB,OAAO,KAAM,KAAK6X,MAAO,KAAKD,OAAQkU,CAAAA,EAE9C,IAAM1c,EAAO,KAAKC,UACZqhC,EAASthC,EAAKyI,OAAS,GAAKzI,EAAKwI,QAAU,EAEjD,KAAK8T,QAAU,CAAA,EACfQ,GAAK,KAAK/D,MAAQJ,GAAQ,CACpB2oB,GAAU3oB,EAAIzC,WAAa,cAO3ByC,EAAIjnB,WACNinB,EAAIjnB,UAAS,EAEf,KAAK4qB,QAAQ3uB,KAAI,GAAIgrB,EAAI2D,QAAO,CAAA,EAClC,EAAG,IAAI,EAEP,KAAKA,QAAQ7wB,QAAQ,CAACoB,EAAMsI,IAAU,CACpCtI,EAAK00C,KAAOpsC,CACd,CAAA,EAEA,KAAKm1B,cAAc,aAAA,CACrB,CAOAmW,gBAAgBjrC,EAAM,CACpB,GAAI,KAAK80B,cAAc,uBAAwB,CAAC90B,KAAAA,EAAMohC,WAAY,EAAI,CAAA,IAAO,GAI7E,SAASjqC,EAAI,EAAGuI,EAAO,KAAKa,KAAKyG,SAAS9P,OAAQC,EAAIuI,EAAM,EAAEvI,EAC5D,KAAK8P,eAAe9P,CAAGkL,EAAAA,WAAWnG,UAAS,EAG7C,QAAS/E,EAAI,EAAGuI,EAAO,KAAKa,KAAKyG,SAAS9P,OAAQC,EAAIuI,EAAM,EAAEvI,EAC5D,KAAK60C,eAAe70C,EAAGouC,GAAWvlC,CAAAA,EAAQA,EAAK,CAACC,aAAc9I,CAAC,CAAA,EAAK6I,CAAI,EAG1E,KAAK80B,cAAc,sBAAuB,CAAC90B,KAAAA,CAAI,CAAA,EACjD,CAOAgsC,eAAersC,EAAOK,EAAM,CAC1B,IAAMQ,EAAO,KAAKyG,eAAetH,CAAAA,EAC3B6N,EAAO,CAAChN,KAAAA,EAAMb,MAAAA,EAAOK,KAAAA,EAAMohC,WAAY,EAAI,EAE7C,KAAKtM,cAAc,sBAAuBtnB,CAAAA,IAAU,KAIxDhN,EAAK6B,WAAWzL,QAAQoJ,CAAAA,EAExBwN,EAAK4zB,WAAa,GAClB,KAAKtM,cAAc,qBAAsBtnB,CAAAA,EAC3C,CAEA47B,QAAS,CACH,KAAKtU,cAAc,eAAgB,CAACsM,WAAY,EAAI,CAAA,IAAO,KAI3DroC,GAASV,IAAI,IAAI,EACf,KAAKgwC,UAAY,CAACtvC,GAAS/B,QAAQ,IAAI,GACzC+B,GAASxC,MAAM,IAAI,GAGrB,KAAKa,KAAI,EACTkvC,GAAqB,CAAC7wC,MAAO,IAAI,CAAA,GAErC,CAEA2B,MAAO,CACL,IAAID,EACJ,GAAI,KAAK4xC,kBAAmB,CAC1B,GAAM,CAAC91B,MAAAA,EAAOD,OAAAA,CAAAA,EAAU,KAAK+1B,kBAE7B,KAAKA,kBAAoB,KACzB,KAAKC,QAAQ/1B,EAAOD,CAAAA,EAQtB,GANA,KAAK2xB,MAAK,EAEN,KAAK1xB,OAAS,GAAK,KAAKD,QAAU,GAIlC,KAAK8hB,cAAc,aAAc,CAACsM,WAAY,EAAI,CAAA,IAAO,GAC3D,OAMF,IAAM6K,EAAS,KAAKnlB,QACpB,IAAK3vB,EAAI,EAAGA,EAAI80C,EAAO/0C,QAAU+0C,EAAO90C,CAAAA,EAAG4vB,GAAK,EAAG,EAAE5vB,EACnD80C,EAAO90C,CAAE,EAACC,KAAK,KAAKqT,SAAS,EAM/B,IAHA,KAAKyhC,cAAa,EAGX/0C,EAAI80C,EAAO/0C,OAAQ,EAAEC,EAC1B80C,EAAO90C,CAAE,EAACC,KAAK,KAAKqT,SAAS,EAG/B,KAAKqqB,cAAc,WAAA,CACrB,CAKAr1B,uBAAuBF,EAAe,CACpC,IAAMC,EAAW,KAAK0oC,gBAChB9nB,EAAS,CAAA,EACXjpB,EAAGuI,EAEP,IAAKvI,EAAI,EAAGuI,EAAOF,EAAStI,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CACjD,IAAMqJ,EAAOhB,EAASrI,CAAE,GACpB,CAACoI,GAAiBiB,EAAK+pC,UACzBnqB,EAAOjoB,KAAKqI,CAAAA,CAEhB,CAEA,OAAO4f,CACT,CAMAQ,8BAA+B,CAC7B,OAAO,KAAKnhB,uBAAuB,EAAI,CACzC,CAOAysC,eAAgB,CACd,GAAI,KAAKpX,cAAc,qBAAsB,CAACsM,WAAY,EAAI,CAAA,IAAO,GACnE,OAGF,IAAM5hC,EAAW,KAAKohB,6BAA4B,EAClD,QAASzpB,EAAIqI,EAAStI,OAAS,EAAGC,GAAK,EAAG,EAAEA,EAC1C,KAAKg1C,aAAa3sC,EAASrI,CAAE,CAAA,EAG/B,KAAK29B,cAAc,mBAAA,CACrB,CAOAqX,aAAa3rC,EAAM,CACjB,IAAMkE,EAAM,KAAKA,IACX8I,EAAO,CACXhN,KAAAA,EACAb,MAAOa,EAAKb,MACZyhC,WAAY,EACd,EAEM92B,EAAO8hC,GAAmB,KAAM5rC,CAAAA,EAElC,KAAKs0B,cAAc,oBAAqBtnB,CAAAA,IAAU,KAIlDlD,GACFwyB,GAASp4B,EAAK4F,CAAAA,EAGhB9J,EAAK6B,WAAWjL,KAAI,EAEhBkT,GACF2yB,GAAWv4B,CAAAA,EAGb8I,EAAK4zB,WAAa,GAClB,KAAKtM,cAAc,mBAAoBtnB,CAAAA,EACzC,CAOAkU,cAAcjM,EAAO,CACnB,OAAOkM,GAAelM,EAAO,KAAKhL,UAAW,KAAKqgC,WAAW,CAC/D,CAEAuB,0BAA0BrzB,EAAGhZ,EAAM9C,EAASskB,EAAkB,CAC5D,IAAM3lB,EAAS6mB,GAAYC,MAAM3iB,CAAK,EACtC,OAAI,OAAOnE,GAAW,WACbA,EAAO,KAAMmd,EAAG9b,EAASskB,CAAAA,EAG3B,CAAA,CACT,CAEAva,eAAehH,EAAc,CAC3B,IAAMsD,EAAU,KAAKhD,KAAKyG,SAAS/G,CAAa,EAC1CT,EAAW,KAAKsoC,UAClBtnC,EAAOhB,EAAS0D,OAAOxE,GAAKA,GAAKA,EAAEmd,WAAatY,CAAAA,EAAS9L,IAAG,EAEhE,OAAK+I,IACHA,EAAO,CACL5K,KAAM,KACN2K,KAAM,CAAA,EACNgD,QAAS,KACTlB,WAAY,KACZ+B,OAAQ,KACR+B,QAAS,KACTG,QAAS,KACTgkC,MAAO/mC,GAAWA,EAAQ+mC,OAAS,EACnC3qC,MAAOM,EACP4b,SAAUtY,EACVM,QAAS,CAAA,EACT4E,QAAS,EACX,EACAjJ,EAASrH,KAAKqI,CAAAA,GAGTA,CACT,CAEA4H,YAAa,CACX,OAAO,KAAK9C,WAAa,KAAKA,SAAWhC,GAAc,KAAM,CAAC7N,MAAO,KAAMG,KAAM,QAAQ,EAC3F,CAEA6nB,wBAAyB,CACvB,OAAO,KAAKmD,6BAA4B,EAAG1pB,MAC7C,CAEAwiB,iBAAiBzZ,EAAc,CAC7B,IAAMsD,EAAU,KAAKhD,KAAKyG,SAAS/G,CAAa,EAChD,GAAI,CAACsD,EACH,MAAO,GAGT,IAAM/C,EAAO,KAAKyG,eAAehH,CAAAA,EAIjC,OAAO,OAAOO,EAAK4D,QAAW,UAAY,CAAC5D,EAAK4D,OAAS,CAACb,EAAQa,MACpE,CAEAkoC,qBAAqBrsC,EAAcsqC,EAAS,CAC1C,IAAM/pC,EAAO,KAAKyG,eAAehH,CAAAA,EACjCO,EAAK4D,OAAS,CAACmmC,CACjB,CAEArxB,qBAAqBvZ,EAAO,CAC1B,KAAKyoC,eAAezoC,CAAM,EAAG,CAAC,KAAKyoC,eAAezoC,CAAM,CAC1D,CAEA6U,kBAAkB7U,EAAO,CACvB,MAAO,CAAC,KAAKyoC,eAAezoC,CAAM,CACpC,CAKA4sC,kBAAkBtsC,EAAcyD,EAAW6mC,EAAS,CAClD,IAAMvqC,EAAOuqC,EAAU,OAAS,OAC1B/pC,EAAO,KAAKyG,eAAehH,CAAAA,EAC3BvK,EAAQ8K,EAAK6B,WAAWqJ,mBAAmBnW,OAAWyK,CAAAA,EAExDoL,GAAQ1H,CAAY,GACtBlD,EAAKD,KAAKmD,CAAAA,EAAWU,OAAS,CAACmmC,EAC/B,KAAKnvC,OAAM,IAEX,KAAKkxC,qBAAqBrsC,EAAcsqC,CAAAA,EAExC70C,EAAM0F,OAAOoF,EAAM,CAAC+pC,QAAAA,CAAO,CAAA,EAC3B,KAAKnvC,OAAQsJ,GAAQA,EAAIzE,eAAiBA,EAAeD,EAAOzK,MAAS,EAE7E,CAEAi3C,KAAKvsC,EAAcyD,EAAW,CAC5B,KAAK6oC,kBAAkBtsC,EAAcyD,EAAW,EAAK,CACvD,CAEA+oC,KAAKxsC,EAAcyD,EAAW,CAC5B,KAAK6oC,kBAAkBtsC,EAAcyD,EAAW,EAAI,CACtD,CAKAwmC,oBAAoBjqC,EAAc,CAChC,IAAMO,EAAO,KAAKsnC,UAAU7nC,CAAa,EACrCO,GAAQA,EAAK6B,YACf7B,EAAK6B,WAAWgF,SAAQ,EAE1B,OAAO,KAAKygC,UAAU7nC,CAAa,CACrC,CAEAysC,OAAQ,CACN,IAAIv1C,EAAGuI,EAIP,IAHA,KAAK/G,KAAI,EACTI,GAASF,OAAO,IAAI,EAEf1B,EAAI,EAAGuI,EAAO,KAAKa,KAAKyG,SAAS9P,OAAQC,EAAIuI,EAAM,EAAEvI,EACxD,KAAK+yC,oBAAoB/yC,CAAAA,CAE7B,CAEAw1C,SAAU,CACR,KAAK7X,cAAc,eAAA,EACnB,GAAM,CAACnN,OAAAA,EAAQjjB,IAAAA,CAAG,EAAI,KAEtB,KAAKgoC,MAAK,EACV,KAAK3wC,OAAO2oC,WAAU,EAElB/c,IACF,KAAK6jB,aAAY,EACjB1C,GAAYnhB,EAAQjjB,CAAAA,EACpB,KAAK+/B,SAAS7c,eAAeljB,CAAAA,EAC7B,KAAKijB,OAAS,KACd,KAAKjjB,IAAM,MAGb,OAAOkiC,GAAU,KAAKvlC,EAAE,EAExB,KAAKyzB,cAAc,cAAA,CACrB,CAEA8X,iBAAiBp/B,EAAM,CACrB,OAAO,KAAKma,OAAOklB,UAAar/B,GAAAA,CAAAA,CAClC,CAKAq7B,YAAa,CACX,KAAKiE,eAAc,EACf,KAAK5vC,QAAQyrC,WACf,KAAKoE,qBAAoB,EAEzB,KAAK1E,SAAW,EAEpB,CAKAyE,gBAAiB,CACf,IAAMh3C,EAAY,KAAKkyC,WACjBvD,EAAW,KAAKA,SAEhBuI,EAAO,CAACp3C,EAAMkyB,IAAa,CAC/B2c,EAAS5c,iBAAiB,KAAMjyB,EAAMkyB,CAAAA,EACtChyB,EAAUF,CAAAA,EAAQkyB,CACpB,EAEMA,EAAW,CAAC9O,EAAGta,EAAGC,IAAM,CAC5Bqa,EAAE7C,QAAUzX,EACZsa,EAAE5C,QAAUzX,EACZ,KAAKusC,cAAclyB,CAAAA,CACrB,EAEAsO,GAAK,KAAKpqB,QAAQouC,OAAS11C,GAASo3C,EAAKp3C,EAAMkyB,CAAAA,CAAAA,CACjD,CAKAilB,sBAAuB,CAChB,KAAK9E,uBACR,KAAKA,qBAAuB,CAAA,GAE9B,IAAMnyC,EAAY,KAAKmyC,qBACjBxD,EAAW,KAAKA,SAEhBuI,EAAO,CAACp3C,EAAMkyB,IAAa,CAC/B2c,EAAS5c,iBAAiB,KAAMjyB,EAAMkyB,CAAAA,EACtChyB,EAAUF,CAAAA,EAAQkyB,CACpB,EACMmlB,EAAU,CAACr3C,EAAMkyB,IAAa,CAC9BhyB,EAAUF,CAAAA,IACZ6uC,EAAS1c,oBAAoB,KAAMnyB,EAAMkyB,CAAAA,EACzC,OAAOhyB,EAAUF,CAAK,EAE1B,EAEMkyB,EAAW,CAAC7U,EAAOD,IAAW,CAC9B,KAAK2U,QACP,KAAK0D,OAAOpY,EAAOD,CAAAA,CAEvB,EAEIk6B,EACE7E,EAAW,IAAM,CACrB4E,EAAQ,SAAU5E,CAAAA,EAElB,KAAKA,SAAW,GAChB,KAAKhd,OAAM,EAEX2hB,EAAK,SAAUllB,CAAAA,EACfklB,EAAK,SAAUE,CAAAA,CACjB,EAEAA,EAAW,IAAM,CACf,KAAK7E,SAAW,GAEhB4E,EAAQ,SAAUnlB,CAAAA,EAGlB,KAAK4kB,MAAK,EACV,KAAK1D,QAAQ,EAAG,CAAA,EAEhBgE,EAAK,SAAU3E,CAAAA,CACjB,EAEI5D,EAASvc,WAAW,KAAKP,MAAM,EACjC0gB,EAAAA,EAEA6E,EAAAA,CAEJ,CAKA1B,cAAe,CACblkB,GAAK,KAAK0gB,WAAY,CAAClgB,EAAUlyB,IAAS,CACxC,KAAK6uC,SAAS1c,oBAAoB,KAAMnyB,EAAMkyB,CAAAA,CAChD,CAAA,EACA,KAAKkgB,WAAa,CAAA,EAElB1gB,GAAK,KAAK2gB,qBAAsB,CAACngB,EAAUlyB,IAAS,CAClD,KAAK6uC,SAAS1c,oBAAoB,KAAMnyB,EAAMkyB,CAAAA,CAChD,CAAA,EACA,KAAKmgB,qBAAuB1yC,MAC9B,CAEA43C,iBAAiBl2C,EAAO+I,EAAM6tB,EAAS,CACrC,IAAMuf,EAASvf,EAAU,MAAQ,SAC7BrtB,EAAMnJ,EAAMF,EAAGuI,EAOnB,IALIM,IAAS,YACXQ,EAAO,KAAKyG,eAAehQ,EAAM,CAAA,EAAGgJ,YAAY,EAChDO,EAAK6B,WAAW,IAAM+qC,EAAS,mBAAoB,EAAA,GAGhDj2C,EAAI,EAAGuI,EAAOzI,EAAMC,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CAC9CE,EAAOJ,EAAME,CAAE,EACf,IAAMkL,EAAahL,GAAQ,KAAK4P,eAAe5P,EAAK4I,YAAY,EAAEoC,WAC9DA,GACFA,EAAW+qC,EAAS,YAAA,EAAc/1C,EAAKoM,QAASpM,EAAK4I,aAAc5I,EAAKsI,KAAK,CAEjF,CACF,CAMA0tC,mBAAoB,CAClB,OAAO,KAAK/1C,SAAW,CAAA,CACzB,CAMAg2C,kBAAkBC,EAAgB,CAChC,IAAMC,EAAa,KAAKl2C,SAAW,CAAA,EAC7B6D,EAASoyC,EAAel1B,IAAI,CAAC,CAACpY,aAAAA,EAAcN,MAAAA,CAAK,IAAM,CAC3D,IAAMa,EAAO,KAAKyG,eAAehH,CAAAA,EACjC,GAAI,CAACO,EACH,MAAM,IAAIoe,MAAM,6BAA+B3e,CAAc,EAG/D,MAAO,CACLA,aAAAA,EACAwD,QAASjD,EAAKD,KAAKZ,CAAM,EACzBA,MAAAA,CACF,CACF,CAAA,EACgB,CAAC8tC,GAAetyC,EAAQqyC,CAAAA,IAGtC,KAAKl2C,QAAU6D,EAEf,KAAK4sC,WAAa,KAClB,KAAKoD,mBAAmBhwC,EAAQqyC,CAAAA,EAEpC,CAWA1Y,cAAcgM,EAAMtzB,EAAMtK,EAAQ,CAChC,OAAO,KAAKilC,SAAStH,OAAO,KAAMC,EAAMtzB,EAAMtK,CAAAA,CAChD,CAOA0C,gBAAgB8nC,EAAU,CACxB,OAAO,KAAKvF,SAASj6B,OAAOhL,OAAO2iC,GAAKA,EAAE3E,OAAO7/B,KAAOqsC,CAAAA,EAAUx2C,SAAW,CAC/E,CAKAi0C,mBAAmBhwC,EAAQqyC,EAAYG,EAAQ,CAC7C,IAAMC,EAAe,KAAK1wC,QAAQ2wC,MAC5BzuB,EAAO,CAAC5Q,EAAGrP,IAAMqP,EAAEtL,OAAOxE,GAAK,CAACS,EAAEwiC,KAAKhjC,GAAKD,EAAEuB,eAAiBtB,EAAEsB,cAAgBvB,EAAEiB,QAAUhB,EAAEgB,KAAK,CAAA,EACpGmuC,EAAc1uB,EAAKouB,EAAYryC,CAAAA,EAC/B4yC,EAAYJ,EAASxyC,EAASikB,EAAKjkB,EAAQqyC,CAAW,EAExDM,EAAY52C,QACd,KAAKi2C,iBAAiBW,EAAaF,EAAa5tC,KAAM,EAAK,EAGzD+tC,EAAU72C,QAAU02C,EAAa5tC,MACnC,KAAKmtC,iBAAiBY,EAAWH,EAAa5tC,KAAM,EAAI,CAE5D,CAKAkrC,cAAclyB,EAAG20B,EAAQ,CACvB,IAAMngC,EAAO,CACXvV,MAAO+gB,EACP20B,OAAAA,EACAvM,WAAY,GACZ+F,YAAa,KAAKzlB,cAAc1I,CAAAA,CAClC,EACMg1B,EAAe9M,IAAYA,EAAOhkC,QAAQouC,QAAU,KAAKpuC,QAAQouC,QAAQznB,SAAS7K,EAAEgR,OAAOp0B,IAAI,EAErG,GAAI,KAAKk/B,cAAc,cAAetnB,EAAMwgC,CAAAA,IAAiB,GAC3D,OAGF,IAAMxnB,EAAU,KAAKynB,aAAaj1B,EAAG20B,EAAQngC,EAAK25B,WAAW,EAE7D35B,OAAAA,EAAK4zB,WAAa,GAClB,KAAKtM,cAAc,aAActnB,EAAMwgC,CAAAA,GAEnCxnB,GAAWhZ,EAAKgZ,UAClB,KAAK4iB,OAAM,EAGN,IACT,CAUA6E,aAAaj1B,EAAG20B,EAAQxG,EAAa,CACnC,GAAM,CAAC7vC,QAASk2C,EAAa,CAAA,EAAItwC,QAAAA,CAAAA,EAAW,KAetCskB,EAAmBmsB,EACnBxyC,EAAS,KAAK+yC,mBAAmBl1B,EAAGw0B,EAAYrG,EAAa3lB,CAAAA,EAC7D4lB,EAAU+G,GAAcn1B,CAAAA,EACxBkuB,EAAYD,GAAmBjuB,EAAG,KAAK+uB,WAAYZ,EAAaC,CAAAA,EAElED,IAGF,KAAKY,WAAa,KAGlB5G,GAAajkC,EAAQkxC,QAAS,CAACp1B,EAAG7d,EAAQ,IAAK,EAAE,IAAI,EAEjDisC,GACFjG,GAAajkC,EAAQ6b,QAAS,CAACC,EAAG7d,EAAQ,IAAK,EAAE,IAAI,GAIzD,IAAMqrB,EAAU,CAACinB,GAAetyC,EAAQqyC,CAAAA,EACxC,OAAIhnB,GAAWmnB,KACb,KAAKr2C,QAAU6D,EACf,KAAKgwC,mBAAmBhwC,EAAQqyC,EAAYG,CAAAA,GAG9C,KAAK5F,WAAab,EAEX1gB,CACT,CAUA0nB,mBAAmBl1B,EAAGw0B,EAAYrG,EAAa3lB,EAAkB,CAC/D,GAAIxI,EAAEpjB,OAAS,WACb,MAAO,CAAA,EAGT,GAAI,CAACuxC,EAEH,OAAOqG,EAGT,IAAMI,EAAe,KAAK1wC,QAAQ2wC,MAClC,OAAO,KAAKxB,0BAA0BrzB,EAAG40B,EAAa5tC,KAAM4tC,EAAcpsB,CAAAA,CAC5E,CACF,EAGA,SAAS+lB,IAAoB,CAC3B,OAAOjgB,GAAK+f,GAAMT,UAAYnxC,GAAUA,EAAM0yC,SAAS9G,WAAU,CAAA,CACnE,CC5uCA,SAASgN,GAAS3pC,EAA+BjB,EAAqB8S,EAAkB,CACtF,GAAM,CAACD,WAAAA,EAAY5X,EAAAA,EAAGC,EAAAA,EAAGya,YAAAA,EAAaD,YAAAA,EAAajc,QAAAA,CAAAA,EAAWuG,EACxD,CAACqV,YAAAA,EAAaw1B,gBAAAA,CAAAA,EAAmBpxC,EACjCqxC,EAAiBl4C,KAAKC,IAAIwiB,EAAcM,EAAao1B,GAAgBl4B,EAAaC,CAAAA,CAAAA,EAIxF,GAHA7R,EAAI43B,UAAS,EACb53B,EAAIsW,IAAItc,EAAGC,EAAGya,EAAcN,EAAc,EAAGxC,EAAai4B,EAAiB,EAAGh4B,EAAWg4B,EAAiB,CAAA,EAEtGp1B,EAAc,EAAG,CACnB,IAAMs1B,EAAiBp4C,KAAKC,IAAIwiB,EAAcK,EAAaq1B,GAAgBl4B,EAAaC,CAAAA,CAAAA,EACxF7R,EAAIsW,IAAItc,EAAGC,EAAGwa,EAAcL,EAAc,EAAGvC,EAAWk4B,EAAiB,EAAGn4B,EAAam4B,EAAiB,EAAG,EAAI,MAC5G,CACL,IAAMC,EAAYr4C,KAAKC,IAAIwiB,EAAc,EAAGM,EAAco1B,GAAgBl4B,EAAaC,CAAAA,CAAAA,EAEvF,GAAI+3B,IAAoB,QACtB5pC,EAAIsW,IAAItc,EAAGC,EAAG+vC,EAAWn4B,EAAWe,GAAK,EAAGhB,EAAagB,GAAK,EAAG,EAAI,UAC5Dg3B,IAAoB,QAAS,CACtC,IAAMpvC,EAAI,EAAIwvC,EAAYA,EACpB93B,EAAO,CAAC1X,EAAI7I,KAAKogB,IAAIF,EAAWe,GAAK,CAAK5Y,EAAAA,EAC1CmY,EAAO,CAAC3X,EAAI7I,KAAKsgB,IAAIJ,EAAWe,GAAK,CAAK3Y,EAAAA,EAC1C6X,EAAStX,EAAI7I,KAAKogB,IAAIH,EAAagB,GAAK,CAAK5Y,EAAAA,EAC7CgY,EAASxX,EAAI7I,KAAKsgB,IAAIL,EAAagB,GAAK,CAAK3Y,EAAAA,EACnD+F,EAAI83B,OAAO5lB,EAAMC,CAAAA,EACjBnS,EAAI83B,OAAOhmB,EAAQE,CAAAA,GAGvBhS,EAAIiqC,UAAS,EAEbjqC,EAAI63B,OAAO,EAAG,CAAA,EACd73B,EAAIkqC,KAAK,EAAG,EAAGlqC,EAAIijB,OAAO1U,MAAOvO,EAAIijB,OAAO3U,MAAM,EAElDtO,EAAI4F,KAAK,SAAA,CACX,CAGA,SAASukC,GAAQnqC,EAA+BjB,EAAqB8S,EAAkB,CACrF,GAAM,CAACD,WAAAA,EAAYw4B,YAAAA,EAAapwC,EAAAA,EAAGC,EAAAA,EAAGya,YAAAA,EAAaD,YAAAA,CAAAA,EAAe1V,EAC9DsrC,EAAcD,EAAc11B,EAIhC1U,EAAI43B,UAAS,EACb53B,EAAIsW,IAAItc,EAAGC,EAAGya,EAAa9C,EAAay4B,EAAax4B,EAAWw4B,CAAAA,EAC5D51B,EAAc21B,GAChBC,EAAcD,EAAc31B,EAC5BzU,EAAIsW,IAAItc,EAAGC,EAAGwa,EAAa5C,EAAWw4B,EAAaz4B,EAAay4B,EAAa,EAAI,GAEjFrqC,EAAIsW,IAAItc,EAAGC,EAAGmwC,EAAav4B,EAAWa,GAASd,EAAac,EAAAA,EAE9D1S,EAAIiqC,UAAS,EACbjqC,EAAI4F,KAAI,CACV,CAEA,SAAS0kC,GAAgBpxC,EAAO,CAC9B,OAAOqxC,GAAkBrxC,EAAO,CAAC,aAAc,WAAY,aAAc,UAAW,CAAA,CACtF,CAKA,SAASsxC,GAAkBl0B,EAAiB7B,EAAqBC,EAAqB+1B,EAAoB,CACxG,IAAMC,EAAIJ,GAAgBh0B,EAAI9d,QAAQmyC,YAAY,EAC5CC,GAAiBl2B,EAAcD,GAAe,EAC9Co2B,EAAal5C,KAAKC,IAAIg5C,EAAeH,EAAah2B,EAAc,CAAA,EAShEq2B,EAAqBh8B,GAAQ,CACjC,IAAMi8B,GAAiBr2B,EAAc/iB,KAAKC,IAAIg5C,EAAe97B,CAAG,GAAK27B,EAAa,EAClF,OAAOpZ,GAAYviB,EAAK,EAAGnd,KAAKC,IAAIg5C,EAAeG,CAAAA,CAAAA,CACrD,EAEA,MAAO,CACLC,WAAYF,EAAkBJ,EAAEM,UAAU,EAC1CC,SAAUH,EAAkBJ,EAAEO,QAAQ,EACtCC,WAAY7Z,GAAYqZ,EAAEQ,WAAY,EAAGL,CAAAA,EACzCM,SAAU9Z,GAAYqZ,EAAES,SAAU,EAAGN,CAAAA,CACvC,CACF,CAKA,SAASO,GAAW5wC,EAAW6wC,EAAerxC,EAAWC,EAAW,CAClE,MAAO,CACLD,EAAGA,EAAIQ,EAAI7I,KAAKogB,IAAIs5B,CAAAA,EACpBpxC,EAAGA,EAAIO,EAAI7I,KAAKsgB,IAAIo5B,CAAAA,CACtB,CACF,CAiBA,SAASC,GACPtrC,EACAjB,EACAyO,EACAyF,EACArZ,EACA4e,EACA,CACA,GAAM,CAACxe,EAAAA,EAAGC,EAAAA,EAAG2X,WAAY/f,EAAOu4C,YAAAA,EAAa31B,YAAa82B,CAAAA,EAAUxsC,EAE9D2V,EAAc/iB,KAAKoC,IAAIgL,EAAQ2V,YAAczB,EAAUzF,EAAS48B,EAAa,CAAA,EAC7E31B,EAAc82B,EAAS,EAAIA,EAASt4B,EAAUzF,EAAS48B,EAAc,EAEvEoB,EAAgB,EACdC,EAAQ7xC,EAAM/H,EAEpB,GAAIohB,EAAS,CAIX,IAAMy4B,EAAuBH,EAAS,EAAIA,EAASt4B,EAAU,EACvD04B,EAAuBj3B,EAAc,EAAIA,EAAczB,EAAU,EACjE24B,GAAsBF,EAAuBC,GAAwB,EACrEE,EAAgBD,IAAuB,EAAIH,EAASG,GAAuBA,EAAqB34B,GAAWw4B,EACjHD,GAAiBC,EAAQI,GAAiB,EAG5C,IAAMC,EAAOn6C,KAAKoC,IAAI,KAAO03C,EAAQ/2B,EAAclH,EAASoF,EAAM8B,EAAAA,EAC5Dq3B,GAAeN,EAAQK,GAAQ,EAC/Bl6B,EAAa/f,EAAQk6C,EAAcP,EACnC35B,EAAWjY,EAAMmyC,EAAcP,EAC/B,CAACR,WAAAA,EAAYC,SAAAA,EAAUC,WAAAA,EAAYC,SAAAA,CAAQ,EAAIX,GAAkBzrC,EAAS0V,EAAaC,EAAa7C,EAAWD,CAAAA,EAE/Go6B,EAA2Bt3B,EAAcs2B,EACzCiB,EAAyBv3B,EAAcu2B,EACvCiB,EAA0Bt6B,EAAao5B,EAAagB,EACpDG,EAAwBt6B,EAAWo5B,EAAWgB,EAE9CG,EAA2B33B,EAAcy2B,EACzCmB,EAAyB53B,EAAc02B,EACvCmB,GAA0B16B,EAAas5B,EAAakB,EACpDG,GAAwB16B,EAAWs5B,EAAWkB,EAIpD,GAFArsC,EAAI43B,UAAS,EAETpf,EAAU,CAEZ,IAAMg0B,GAAyBN,EAA0BC,GAAyB,EAKlF,GAJAnsC,EAAIsW,IAAItc,EAAGC,EAAGya,EAAaw3B,EAAyBM,CAAAA,EACpDxsC,EAAIsW,IAAItc,EAAGC,EAAGya,EAAa83B,EAAuBL,CAAAA,EAG9ClB,EAAW,EAAG,CAChB,IAAMwB,EAAUrB,GAAWa,EAAwBE,EAAuBnyC,EAAGC,CAAAA,EAC7E+F,EAAIsW,IAAIm2B,EAAQzyC,EAAGyyC,EAAQxyC,EAAGgxC,EAAUkB,EAAuBt6B,EAAWa,EAAAA,EAI5E,IAAMg6B,EAAKtB,GAAWiB,EAAwBx6B,EAAU7X,EAAGC,CAAAA,EAI3D,GAHA+F,EAAI83B,OAAO4U,EAAG1yC,EAAG0yC,EAAGzyC,CAAC,EAGjBkxC,EAAW,EAAG,CAChB,IAAMsB,EAAUrB,GAAWiB,EAAwBE,GAAuBvyC,EAAGC,CAAAA,EAC7E+F,EAAIsW,IAAIm2B,EAAQzyC,EAAGyyC,EAAQxyC,EAAGkxC,EAAUt5B,EAAWa,GAAS65B,GAAwB56C,KAAKihB,EAAE,EAI7F,IAAM+5B,GAA0B96B,EAAYs5B,EAAW12B,GAAiB7C,EAAcs5B,EAAaz2B,IAAiB,EAKpH,GAJAzU,EAAIsW,IAAItc,EAAGC,EAAGwa,EAAa5C,EAAYs5B,EAAW12B,EAAck4B,EAAuB,EAAI,EAC3F3sC,EAAIsW,IAAItc,EAAGC,EAAGwa,EAAak4B,EAAuB/6B,EAAcs5B,EAAaz2B,EAAc,EAAI,EAG3Fy2B,EAAa,EAAG,CAClB,IAAMuB,EAAUrB,GAAWgB,EAA0BE,GAAyBtyC,EAAGC,CAAAA,EACjF+F,EAAIsW,IAAIm2B,EAAQzyC,EAAGyyC,EAAQxyC,EAAGixC,EAAYoB,GAA0B36C,KAAKihB,GAAIhB,EAAac,EAAAA,EAI5F,IAAMk6B,EAAKxB,GAAWY,EAA0Bp6B,EAAY5X,EAAGC,CAAAA,EAI/D,GAHA+F,EAAI83B,OAAO8U,EAAG5yC,EAAG4yC,EAAG3yC,CAAC,EAGjB+wC,EAAa,EAAG,CAClB,IAAMyB,EAAUrB,GAAWY,EAA0BE,EAAyBlyC,EAAGC,CAAAA,EACjF+F,EAAIsW,IAAIm2B,EAAQzyC,EAAGyyC,EAAQxyC,EAAG+wC,EAAYp5B,EAAac,GAASw5B,CAAAA,OAE7D,CACLlsC,EAAI63B,OAAO79B,EAAGC,CAAAA,EAEd,IAAM4yC,EAAcl7C,KAAKogB,IAAIm6B,CAAAA,EAA2Bx3B,EAAc1a,EAChE8yC,EAAcn7C,KAAKsgB,IAAIi6B,CAAAA,EAA2Bx3B,EAAcza,EACtE+F,EAAI83B,OAAO+U,EAAaC,CAAAA,EAExB,IAAMC,EAAYp7C,KAAKogB,IAAIo6B,CAAAA,EAAyBz3B,EAAc1a,EAC5DgzC,EAAYr7C,KAAKsgB,IAAIk6B,CAAAA,EAAyBz3B,EAAcza,EAClE+F,EAAI83B,OAAOiV,EAAWC,CAAAA,EAGxBhtC,EAAIiqC,UAAS,CACf,CAEA,SAASgD,GACPjtC,EACAjB,EACAyO,EACAyF,EACAuF,EACA,CACA,GAAM,CAAC00B,YAAAA,EAAat7B,WAAAA,EAAYP,cAAAA,CAAAA,EAAiBtS,EAC7C8S,EAAW9S,EAAQ8S,SACvB,GAAIq7B,EAAa,CACf5B,GAAQtrC,EAAKjB,EAASyO,EAAQyF,EAASpB,EAAU2G,CAAAA,EACjD,QAAS/lB,EAAI,EAAGA,EAAIy6C,EAAa,EAAEz6C,EACjCuN,EAAIiB,KAAI,EAEL8N,MAAMsC,CAAgB,IACzBQ,EAAWD,GAAcP,EAAgBM,IAAOA,KAGpD25B,OAAAA,GAAQtrC,EAAKjB,EAASyO,EAAQyF,EAASpB,EAAU2G,CAAAA,EACjDxY,EAAIiB,KAAI,EACD4Q,CACT,CAEA,SAASomB,GACPj4B,EACAjB,EACAyO,EACAyF,EACAuF,EACA,CACA,GAAM,CAAC00B,YAAAA,EAAat7B,WAAAA,EAAYP,cAAAA,EAAe7Y,QAAAA,CAAO,EAAIuG,EACpD,CAACqV,YAAAA,EAAaw1B,gBAAAA,EAAiBxU,WAAAA,EAAYE,iBAAAA,EAAkBqV,aAAAA,CAAY,EAAInyC,EAC7E20C,EAAQ30C,EAAQke,cAAgB,QAEtC,GAAI,CAACtC,EACH,OAGFpU,EAAI03B,YAAYtC,GAAc,CAAA,CAAE,EAChCp1B,EAAI23B,eAAiBrC,EAEjB6X,GACFntC,EAAImU,UAAYC,EAAc,EAC9BpU,EAAIotC,SAAWxD,GAAmB,UAElC5pC,EAAImU,UAAYC,EAChBpU,EAAIotC,SAAWxD,GAAmB,SAGpC,IAAI/3B,EAAW9S,EAAQ8S,SACvB,GAAIq7B,EAAa,CACf5B,GAAQtrC,EAAKjB,EAASyO,EAAQyF,EAASpB,EAAU2G,CAAAA,EACjD,QAAS/lB,EAAI,EAAGA,EAAIy6C,EAAa,EAAEz6C,EACjCuN,EAAI+3B,OAAM,EAEPhpB,MAAMsC,CAAgB,IACzBQ,EAAWD,GAAcP,EAAgBM,IAAOA,KAIhDw7B,GACFhD,GAAQnqC,EAAKjB,EAAS8S,CAAAA,EAGpBrZ,EAAQ60C,UAAYx7B,EAAWD,GAAcgB,IAAM+3B,IAAiB,GAAKf,IAAoB,SAC/FD,GAAS3pC,EAAKjB,EAAS8S,CAAAA,EAGpBq7B,IACH5B,GAAQtrC,EAAKjB,EAASyO,EAAQyF,EAASpB,EAAU2G,CAAAA,EACjDxY,EAAI+3B,OAAM,EAEd,CAUe,IAAMuV,GAAN,cAAyBjlB,EAAAA,CAEtC,OAAO1rB,GAAK,MAEZ,OAAO9E,SAAW,CAChB6e,YAAa,SACbzC,YAAa,OACbmhB,WAAY,CAAA,EACZE,iBAAkB,EAClBsU,gBAAiB/4C,OACjB85C,aAAc,EACdv2B,YAAa,EACb5G,OAAQ,EACRyF,QAAS,EACTZ,MAAOxhB,OACP2nB,SAAU,GACV60B,SAAU,IAGZ,OAAO/kB,cAAgB,CACrBvU,gBAAiB,mBAGnB,OAAOb,YAAc,CACnBC,YAAa,GACbC,WAAa5D,GAASA,IAAS,cAGjC6B,cACAQ,SACAq7B,YACAz4B,YACAC,YACA01B,YACAx4B,WAEArhB,YAAY8E,EAAK,CACf,MAAK,EAEL,KAAKmD,QAAU3H,OACf,KAAKwgB,cAAgBxgB,OACrB,KAAK+gB,WAAa/gB,OAClB,KAAKghB,SAAWhhB,OAChB,KAAK4jB,YAAc5jB,OACnB,KAAK6jB,YAAc7jB,OACnB,KAAKu5C,YAAc,EACnB,KAAK8C,YAAc,EAEf73C,GACFsC,OAAOyB,OAAO,KAAM/D,CAAAA,CAExB,CAEA6nB,QAAQqwB,EAAgBC,EAAgB1wB,EAA2B,CACjE,IAAM/L,EAAQ,KAAKsM,SAAS,CAAC,IAAK,KAAMP,CAAAA,EAClC,CAACzK,MAAAA,EAAOsL,SAAAA,CAAAA,EAAYL,GAAkBvM,EAAO,CAAC/W,EAAGuzC,EAAQtzC,EAAGuzC,CAAM,CAAA,EAClE,CAAC57B,WAAAA,EAAYC,SAAAA,EAAU4C,YAAAA,EAAaC,YAAAA,EAAarD,cAAAA,CAAAA,EAAiB,KAAKgM,SAAS,CACpF,aACA,WACA,cACA,cACA,iBACCP,CAAAA,EACG2wB,GAAW,KAAKj1C,QAAQya,QAAU,KAAKza,QAAQ4b,aAAe,EAC9D6B,EAAiBvU,GAAe2P,EAAeQ,EAAWD,CAAAA,EAC1D87B,EAAiBp7B,GAAcD,EAAOT,EAAYC,CAAAA,GAAaD,IAAeC,EAC9E87B,EAAgB13B,GAAkBtE,IAAO+7B,EACzCE,EAAeC,GAAWlwB,EAAUlJ,EAAcg5B,EAAS/4B,EAAc+4B,CAAAA,EAE/E,OAAQE,GAAiBC,CAC3B,CAEAlwB,eAAeZ,EAA2B,CACxC,GAAM,CAAC9iB,EAAAA,EAAGC,EAAAA,EAAG2X,WAAAA,EAAYC,SAAAA,EAAU4C,YAAAA,EAAaC,YAAAA,CAAW,EAAI,KAAK2I,SAAS,CAC3E,IACA,IACA,aACA,WACA,cACA,eACCP,CAAAA,EACG,CAACtP,OAAAA,EAAQyF,QAAAA,CAAAA,EAAW,KAAKza,QACzBs1C,GAAal8B,EAAaC,GAAY,EACtCk8B,GAAct5B,EAAcC,EAAczB,EAAUzF,GAAU,EACpE,MAAO,CACLxT,EAAGA,EAAIrI,KAAKogB,IAAI+7B,CAAaC,EAAAA,EAC7B9zC,EAAGA,EAAItI,KAAKsgB,IAAI67B,CAAaC,EAAAA,CAC/B,CACF,CAEAxlB,gBAAgBzL,EAA2B,CACzC,OAAO,KAAKY,eAAeZ,CAAAA,CAC7B,CAEApqB,KAAKsN,EAA+B,CAClC,GAAM,CAACxH,QAAAA,EAAS6Y,cAAAA,CAAa,EAAI,KAC3B7D,GAAUhV,EAAQgV,QAAU,GAAK,EACjCyF,GAAWza,EAAQya,SAAW,GAAK,EACnCuF,EAAWhgB,EAAQggB,SAIzB,GAHA,KAAK4xB,YAAe5xC,EAAQke,cAAgB,QAAW,IAAO,EAC9D,KAAKw2B,YAAc77B,EAAgBM,GAAMhgB,KAAKqE,MAAMqb,EAAgBM,EAAAA,EAAO,EAEvEN,IAAkB,GAAK,KAAKoD,YAAc,GAAK,KAAKC,YAAc,EACpE,OAGF1U,EAAIm3B,KAAI,EAER,IAAM2W,GAAa,KAAKl8B,WAAa,KAAKC,UAAY,EACtD7R,EAAIguC,UAAUr8C,KAAKogB,IAAI+7B,CAAAA,EAAatgC,EAAQ7b,KAAKsgB,IAAI67B,CAAatgC,EAAAA,CAAAA,EAClE,IAAMygC,EAAM,EAAIt8C,KAAKsgB,IAAItgB,KAAKC,IAAIghB,GAAIvB,GAAiB,CAAA,CAAA,EACjD68B,EAAe1gC,EAASygC,EAE9BjuC,EAAI8T,UAAYtb,EAAQub,gBACxB/T,EAAIgU,YAAcxb,EAAQyb,YAE1Bg5B,GAAQjtC,EAAK,KAAMkuC,EAAcj7B,EAASuF,CAAAA,EAC1Cyf,GAAWj4B,EAAK,KAAMkuC,EAAcj7B,EAASuF,CAAAA,EAE7CxY,EAAIq3B,QAAO,CACb,CACF,ECzZA,SAAS8W,GAASnuC,EAAKxH,EAASob,EAAQpb,EAAS,CAC/CwH,EAAIouC,QAAU1sC,GAAekS,EAAMy6B,eAAgB71C,EAAQ61C,cAAc,EACzEruC,EAAI03B,YAAYh2B,GAAekS,EAAMwhB,WAAY58B,EAAQ48B,UAAU,CAAA,EACnEp1B,EAAI23B,eAAiBj2B,GAAekS,EAAM0hB,iBAAkB98B,EAAQ88B,gBAAgB,EACpFt1B,EAAIotC,SAAW1rC,GAAekS,EAAMg2B,gBAAiBpxC,EAAQoxC,eAAe,EAC5E5pC,EAAImU,UAAYzS,GAAekS,EAAMQ,YAAa5b,EAAQ4b,WAAW,EACrEpU,EAAIgU,YAActS,GAAekS,EAAMK,YAAazb,EAAQyb,WAAW,CACzE,CAEA,SAAS6jB,GAAO93B,EAAKsuC,EAAUh5C,EAAQ,CACrC0K,EAAI83B,OAAOxiC,EAAO0E,EAAG1E,EAAO2E,CAAC,CAC/B,CAKA,SAASs0C,GAAc/1C,EAAS,CAC9B,OAAIA,EAAQg2C,QACHC,GAGLj2C,EAAQk2C,SAAWl2C,EAAQm2C,yBAA2B,WACjDC,GAGF9W,EACT,CAEA,SAAS+W,GAAS/9B,EAAQ2G,EAAS8H,EAAS,CAAA,EAAI,CAC9C,IAAM1b,EAAQiN,EAAOte,OACf,CAACX,MAAOi9C,EAAc,EAAGl1C,IAAKm1C,EAAYlrC,EAAQ,CAAC,EAAI0b,EACvD,CAAC1tB,MAAOm9C,EAAcp1C,IAAKq1C,CAAAA,EAAcx3B,EACzC5lB,EAAQF,KAAKoC,IAAI+6C,EAAaE,CAAAA,EAC9Bp1C,EAAMjI,KAAKC,IAAIm9C,EAAWE,CAAAA,EAC1BC,EAAUJ,EAAcE,GAAgBD,EAAYC,GAAgBF,EAAcG,GAAcF,EAAYE,EAElH,MAAO,CACLprC,MAAAA,EACAhS,MAAAA,EACAsE,KAAMshB,EAAQthB,KACd6E,KAAMpB,EAAM/H,GAAS,CAACq9C,EAAUrrC,EAAQjK,EAAM/H,EAAQ+H,EAAM/H,CAC9D,CACF,CAiBA,SAASs9C,GAAYnvC,EAAKkX,EAAMO,EAAS8H,EAAQ,CAC/C,GAAM,CAACzO,OAAAA,EAAQtY,QAAAA,CAAAA,EAAW0e,EACpB,CAACrT,MAAAA,EAAOhS,MAAAA,EAAOsE,KAAAA,EAAM6E,KAAAA,CAAAA,EAAQ6zC,GAAS/9B,EAAQ2G,EAAS8H,CAAAA,EACvD6vB,EAAab,GAAc/1C,CAAAA,EAE7B,CAACgQ,KAAAA,EAAO,GAAM7O,QAAAA,CAAO,EAAI4lB,GAAU,CAAA,EACnC9sB,EAAGse,EAAO/M,EAEd,IAAKvR,EAAI,EAAGA,GAAKuI,EAAM,EAAEvI,EACvBse,EAAQD,GAAQjf,GAAS8H,EAAUqB,EAAOvI,EAAIA,IAAMoR,CAAM,EAEtDkN,CAAAA,EAAMG,OAGC1I,GACTxI,EAAI63B,OAAO9mB,EAAM/W,EAAG+W,EAAM9W,CAAC,EAC3BuO,EAAO,IAEP4mC,EAAWpvC,EAAKgE,EAAM+M,EAAOpX,EAASnB,EAAQg2C,OAAO,EAGvDxqC,EAAO+M,GAGT,OAAI5a,IACF4a,EAAQD,GAAQjf,GAAS8H,EAAUqB,EAAO,IAAM6I,CAAM,EACtDurC,EAAWpvC,EAAKgE,EAAM+M,EAAOpX,EAASnB,EAAQg2C,OAAO,GAGhD,CAAC,CAACr4C,CACX,CAiBA,SAASk5C,GAAgBrvC,EAAKkX,EAAMO,EAAS8H,EAAQ,CACnD,IAAMzO,EAASoG,EAAKpG,OACd,CAACjN,MAAAA,EAAOhS,MAAAA,EAAOmJ,KAAAA,CAAAA,EAAQ6zC,GAAS/9B,EAAQ2G,EAAS8H,CAAAA,EACjD,CAAC/W,KAAAA,EAAO,GAAM7O,QAAAA,CAAO,EAAI4lB,GAAU,CAAA,EACrC+vB,EAAO,EACPC,EAAS,EACT98C,EAAGse,EAAOy+B,EAAO38B,EAAMJ,EAAMg9B,EAE3BC,EAAcz0C,IAAWpJ,GAAS8H,EAAUqB,EAAOC,EAAQA,IAAU4I,EACrE8rC,EAAQ,IAAM,CACd98B,IAASJ,IAEXzS,EAAI83B,OAAOwX,EAAM78B,CAAAA,EACjBzS,EAAI83B,OAAOwX,EAAMz8B,CAAAA,EAGjB7S,EAAI83B,OAAOwX,EAAMG,CAAAA,EAErB,EAOA,IALIjnC,IACFuI,EAAQD,EAAO4+B,EAAW,CAAG,CAAA,EAC7B1vC,EAAI63B,OAAO9mB,EAAM/W,EAAG+W,EAAM9W,CAAC,GAGxBxH,EAAI,EAAGA,GAAKuI,EAAM,EAAEvI,EAAG,CAG1B,GAFAse,EAAQD,EAAO4+B,EAAWj9C,CAAG,CAAA,EAEzBse,EAAMG,KAER,SAGF,IAAMlX,EAAI+W,EAAM/W,EACVC,EAAI8W,EAAM9W,EACV21C,EAAS51C,EAAI,EAEf41C,IAAWJ,GAETv1C,EAAI4Y,EACNA,EAAO5Y,EACEA,EAAIwY,IACbA,EAAOxY,GAGTq1C,GAAQC,EAASD,EAAOt1C,GAAK,EAAEu1C,IAE/BI,EAAAA,EAGA3vC,EAAI83B,OAAO99B,EAAGC,CAAAA,EAEdu1C,EAAQI,EACRL,EAAS,EACT18B,EAAOJ,EAAOxY,GAGhBw1C,EAAQx1C,CACV,CACA01C,EAAAA,CACF,CAOA,SAASE,GAAkB34B,EAAM,CAC/B,IAAMxd,EAAOwd,EAAK1e,QACZ48B,EAAa17B,EAAK07B,YAAc17B,EAAK07B,WAAW5iC,OAEtD,MADoB,CAAC0kB,EAAKM,YAAc,CAACN,EAAKhhB,OAAS,CAACwD,EAAKg1C,SAAWh1C,EAAKi1C,yBAA2B,YAAc,CAACj1C,EAAK80C,SAAW,CAACpZ,EACnHia,GAAkBF,EACzC,CAKA,SAASW,GAAwBt3C,EAAS,CACxC,OAAIA,EAAQg2C,QACHuB,GAGLv3C,EAAQk2C,SAAWl2C,EAAQm2C,yBAA2B,WACjDqB,GAGFC,EACT,CAEA,SAASC,GAAoBlwC,EAAKkX,EAAMrlB,EAAOgS,EAAO,CACpD,IAAIssC,EAAOj5B,EAAKk5B,MACXD,IACHA,EAAOj5B,EAAKk5B,MAAQ,IAAIC,OACpBn5B,EAAKi5B,KAAKA,EAAMt+C,EAAOgS,CAAQ,GACjCssC,EAAKlG,UAAS,GAGlBkE,GAASnuC,EAAKkX,EAAK1e,OAAO,EAC1BwH,EAAI+3B,OAAOoY,CAAAA,CACb,CAEA,SAASG,GAAiBtwC,EAAKkX,EAAMrlB,EAAOgS,EAAO,CACjD,GAAM,CAAC0sC,SAAAA,EAAU/3C,QAAAA,CAAAA,EAAW0e,EACtBs5B,EAAgBX,GAAkB34B,CAAAA,EAExC,QAAWO,KAAW84B,EACpBpC,GAASnuC,EAAKxH,EAASif,EAAQ7D,KAAK,EACpC5T,EAAI43B,UAAS,EACT4Y,EAAcxwC,EAAKkX,EAAMO,EAAS,CAAC5lB,MAAAA,EAAO+H,IAAK/H,EAAQgS,EAAQ,EAAK,GACtE7D,EAAIiqC,UAAS,EAEfjqC,EAAI+3B,OAAM,CAEd,CAEA,IAAM0Y,GAAY,OAAOJ,QAAW,WAEpC,SAAS39C,GAAKsN,EAAKkX,EAAMrlB,EAAOgS,EAAO,CACjC4sC,IAAa,CAACv5B,EAAK1e,QAAQif,QAC7By4B,GAAoBlwC,EAAKkX,EAAMrlB,EAAOgS,CAAAA,EAEtCysC,GAAiBtwC,EAAKkX,EAAMrlB,EAAOgS,CAAAA,CAEvC,CAEe,IAAM6sC,GAAN,cAA0BroB,EAAAA,CAEvC,OAAO1rB,GAAK,OAKZ,OAAO9E,SAAW,CAChBw2C,eAAgB,OAChBjZ,WAAY,CAAA,EACZE,iBAAkB,EAClBsU,gBAAiB,QACjBx1B,YAAa,EACbu8B,gBAAiB,GACjBhC,uBAAwB,UACxB1tC,KAAM,GACNgW,SAAU,GACVu3B,QAAS,GACTE,QAAS,GAMX,OAAOpmB,cAAgB,CACrBvU,gBAAiB,kBACjBE,YAAa,eAIf,OAAOf,YAAc,CACnBC,YAAa,GACbC,WAAa5D,GAASA,IAAS,cAAgBA,IAAS,QAI1Djf,YAAY8E,EAAK,CACf,MAAK,EAEL,KAAKqiB,SAAW,GAChB,KAAKlf,QAAU3H,OACf,KAAKyG,OAASzG,OACd,KAAKqF,MAAQrF,OACb,KAAK6oB,UAAY7oB,OACjB,KAAKu/C,MAAQv/C,OACb,KAAK+/C,QAAU//C,OACf,KAAKggD,UAAYhgD,OACjB,KAAK2mB,WAAa,GAClB,KAAKs5B,eAAiB,GACtB,KAAKv5B,cAAgB1mB,OAEjBwE,GACFsC,OAAOyB,OAAO,KAAM/D,CAAAA,CAExB,CAEA+iB,oBAAoBrS,EAAWhE,EAAW,CACxC,IAAMvJ,EAAU,KAAKA,QACrB,IAAKA,EAAQk2C,SAAWl2C,EAAQm2C,yBAA2B,aAAe,CAACn2C,EAAQg2C,SAAW,CAAC,KAAKsC,eAAgB,CAClH,IAAM36C,EAAOqC,EAAQye,SAAW,KAAK/gB,MAAQ,KAAKwjB,UAClDq3B,GAA2B,KAAKH,QAASp4C,EAASuN,EAAW5P,EAAM4L,CAAAA,EACnE,KAAK+uC,eAAiB,GAE1B,CAEA,IAAIhgC,OAAOA,EAAQ,CACjB,KAAK8/B,QAAU9/B,EACf,OAAO,KAAK+/B,UACZ,OAAO,KAAKT,MACZ,KAAKU,eAAiB,EACxB,CAEA,IAAIhgC,QAAS,CACX,OAAO,KAAK8/B,OACd,CAEA,IAAIL,UAAW,CACb,OAAO,KAAKM,YAAc,KAAKA,UAAYG,GAAiB,KAAM,KAAKx4C,QAAQif,OAAO,EACxF,CAMA6R,OAAQ,CACN,IAAMinB,EAAW,KAAKA,SAChBz/B,EAAS,KAAKA,OACpB,OAAOy/B,EAAS/9C,QAAUse,EAAOy/B,EAAS,CAAA,EAAG1+C,KAAK,CACpD,CAMA4c,MAAO,CACL,IAAM8hC,EAAW,KAAKA,SAChBz/B,EAAS,KAAKA,OACdjN,EAAQ0sC,EAAS/9C,OACvB,OAAOqR,GAASiN,EAAOy/B,EAAS1sC,EAAQ,CAAA,EAAGjK,GAAG,CAChD,CASAq3C,YAAYlgC,EAAOgpB,EAAU,CAC3B,IAAMvhC,EAAU,KAAKA,QACfU,EAAQ6X,EAAMgpB,CAAS,EACvBjpB,EAAS,KAAKA,OACdy/B,EAAWW,GAAe,KAAM,CAACnX,SAAAA,EAAUloC,MAAOqH,EAAOU,IAAKV,CAAK,CAAA,EAEzE,GAAI,CAACq3C,EAAS/9C,OACZ,OAGF,IAAMkpB,EAAS,CAAA,EACTy1B,EAAerB,GAAwBt3C,CAAAA,EACzC/F,EAAGuI,EACP,IAAKvI,EAAI,EAAGuI,EAAOu1C,EAAS/9C,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CACjD,GAAM,CAACZ,MAAAA,EAAO+H,IAAAA,CAAAA,EAAO22C,EAAS99C,CAAE,EAC1B+kC,EAAK1mB,EAAOjf,CAAM,EAClB4lC,EAAK3mB,EAAOlX,CAAI,EACtB,GAAI49B,IAAOC,EAAI,CACb/b,EAAOjoB,KAAK+jC,CAAAA,EACZ,SAEF,IAAMj9B,EAAI5I,KAAKwY,KAAKjR,EAAQs+B,EAAGuC,CAAAA,IAActC,EAAGsC,CAAAA,EAAYvC,EAAGuC,CAAAA,EAAQ,EACjEqX,EAAeD,EAAa3Z,EAAIC,EAAIl9B,EAAG/B,EAAQg2C,OAAO,EAC5D4C,EAAarX,CAAAA,EAAYhpB,EAAMgpB,CAAS,EACxCre,EAAOjoB,KAAK29C,CAAAA,CACd,CACA,OAAO11B,EAAOlpB,SAAW,EAAIkpB,EAAO,CAAA,EAAKA,CAC3C,CAgBAyzB,YAAYnvC,EAAKyX,EAAS8H,EAAQ,CAEhC,OADsBswB,GAAkB,IAAI,EACvB7vC,EAAK,KAAMyX,EAAS8H,CAAAA,CAC3C,CASA4wB,KAAKnwC,EAAKnO,EAAOgS,EAAO,CACtB,IAAM0sC,EAAW,KAAKA,SAChBC,EAAgBX,GAAkB,IAAI,EACxC15C,EAAO,KAAKD,MAEhBrE,EAAQA,GAAS,EACjBgS,EAAQA,GAAU,KAAKiN,OAAOte,OAASX,EAEvC,QAAW4lB,KAAW84B,EACpBp6C,GAAQq6C,EAAcxwC,EAAK,KAAMyX,EAAS,CAAC5lB,MAAAA,EAAO+H,IAAK/H,EAAQgS,EAAQ,CAAC,CAAA,EAE1E,MAAO,CAAC,CAAC1N,CACX,CASAzD,KAAKsN,EAAK+F,EAAWlU,EAAOgS,EAAO,CACjC,IAAMrL,EAAU,KAAKA,SAAW,CAAA,GACjB,KAAKsY,QAAU,CAAA,GAEnBte,QAAUgG,EAAQ4b,cAC3BpU,EAAIm3B,KAAI,EAERzkC,GAAKsN,EAAK,KAAMnO,EAAOgS,CAAAA,EAEvB7D,EAAIq3B,QAAO,GAGT,KAAK3f,WAEP,KAAKo5B,eAAiB,GACtB,KAAKV,MAAQv/C,OAEjB,CACF,EClbA,SAASqsB,GAAQ5B,EAAkBiD,EAAariB,EAAiB4gB,EAA4B,CAC3F,IAAMtkB,EAAU8iB,EAAG9iB,QACb,CAAC,CAAC0D,CAAK,EAAEhD,CAAAA,EAASoiB,EAAG+B,SAAS,CAACnhB,GAAO4gB,CAAAA,EAE5C,OAAQnrB,KAAKwY,IAAIoU,EAAMrlB,CAAAA,EAASV,EAAQqY,OAASrY,EAAQ64C,SAC3D,CAIe,IAAMC,GAAN,cAA2BjpB,EAAAA,CAExC,OAAO1rB,GAAK,QAEZiB,OACAsT,KACAjd,KAKA,OAAO4D,SAAW,CAChBuc,YAAa,EACbi9B,UAAW,EACX16B,iBAAkB,EAClB46B,YAAa,EACb79B,WAAY,SACZ7C,OAAQ,EACRO,SAAU,GAMZ,OAAOkX,cAAgB,CACrBvU,gBAAiB,kBACjBE,YAAa,eAGf1jB,YAAY8E,EAAK,CACf,MAAK,EAEL,KAAKmD,QAAU3H,OACf,KAAK+M,OAAS/M,OACd,KAAKqgB,KAAOrgB,OACZ,KAAKoD,KAAOpD,OAERwE,GACFsC,OAAOyB,OAAO,KAAM/D,CAAAA,CAExB,CAEA6nB,QAAQs0B,EAAgBC,EAAgB30B,EAA4B,CAClE,IAAMtkB,EAAU,KAAKA,QACf,CAACwB,EAAAA,EAAGC,EAAAA,CAAAA,EAAK,KAAKojB,SAAS,CAAC,IAAK,KAAMP,CAAAA,EACzC,OAASnrB,KAAKirB,IAAI40B,EAASx3C,EAAG,CAAA,EAAKrI,KAAKirB,IAAI60B,EAASx3C,EAAG,CAAA,EAAMtI,KAAKirB,IAAIpkB,EAAQ64C,UAAY74C,EAAQqY,OAAQ,CAAA,CAC7G,CAEA6gC,SAASF,EAAgB10B,EAA4B,CACnD,OAAOI,GAAQ,KAAMs0B,EAAQ,IAAK10B,CAAAA,CACpC,CAEA60B,SAASF,EAAgB30B,EAA4B,CACnD,OAAOI,GAAQ,KAAMu0B,EAAQ,IAAK30B,CAAAA,CACpC,CAEAY,eAAeZ,EAA4B,CACzC,GAAM,CAAC9iB,EAAAA,EAAGC,EAAAA,CAAAA,EAAK,KAAKojB,SAAS,CAAC,IAAK,KAAMP,CAAAA,EACzC,MAAO,CAAC9iB,EAAAA,EAAGC,EAAAA,CAAC,CACd,CAEAd,KAAKX,EAAqD,CACxDA,EAAUA,GAAW,KAAKA,SAAW,CAAA,EACrC,IAAIqY,EAASrY,EAAQqY,QAAU,EAC/BA,EAASlf,KAAKoC,IAAI8c,EAAQA,GAAUrY,EAAQ+4C,aAAe,CAAA,EAC3D,IAAMn9B,EAAcvD,GAAUrY,EAAQ4b,aAAe,EACrD,OAAQvD,EAASuD,GAAe,CAClC,CAEA1hB,KAAKsN,EAA+B8F,EAAiB,CACnD,IAAMtN,EAAU,KAAKA,QAEjB,KAAK0Y,MAAQ1Y,EAAQqY,OAAS,IAAO,CAACoM,GAAe,KAAMnX,EAAM,KAAK3M,KAAKX,CAAAA,EAAW,CAAI,IAI9FwH,EAAIgU,YAAcxb,EAAQyb,YAC1BjU,EAAImU,UAAY3b,EAAQ4b,YACxBpU,EAAI8T,UAAYtb,EAAQub,gBACxB69B,GAAU5xC,EAAKxH,EAAS,KAAKwB,EAAG,KAAKC,CAAC,EACxC,CAEAshB,UAAW,CACT,IAAM/iB,EAAU,KAAKA,SAAW,CAAA,EAEhC,OAAOA,EAAQqY,OAASrY,EAAQ64C,SAClC,CACF,EC5FA,SAASQ,GAAaC,EAAKh1B,EAAkB,CAC3C,GAAM,CAAC9iB,EAAAA,EAAGC,EAAAA,EAAGoS,KAAAA,EAAMkC,MAAAA,EAAOD,OAAAA,CAAAA,EAAmCwjC,EAAIz0B,SAAS,CAAC,IAAK,IAAK,OAAQ,QAAS,UAAWP,CAAAA,EAE7GziB,EAAMF,EAAOD,EAAKE,EAAQ23C,EAE9B,OAAID,EAAI1lC,YACN2lC,EAAOzjC,EAAS,EAChBjU,EAAO1I,KAAKC,IAAIoI,EAAGqS,CAAAA,EACnBlS,EAAQxI,KAAKoC,IAAIiG,EAAGqS,CAAAA,EACpBnS,EAAMD,EAAI83C,EACV33C,EAASH,EAAI83C,IAEbA,EAAOxjC,EAAQ,EACflU,EAAOL,EAAI+3C,EACX53C,EAAQH,EAAI+3C,EACZ73C,EAAMvI,KAAKC,IAAIqI,EAAGoS,CAAAA,EAClBjS,EAASzI,KAAKoC,IAAIkG,EAAGoS,CAAAA,GAGhB,CAAChS,KAAAA,EAAMH,IAAAA,EAAKC,MAAAA,EAAOC,OAAAA,CAAM,CAClC,CAEA,SAAS43C,GAAY9gC,EAAMhY,EAAOtH,EAAKmC,EAAK,CAC1C,OAAOmd,EAAO,EAAImgB,GAAYn4B,EAAOtH,EAAKmC,CAAI,CAChD,CAEA,SAASk+C,GAAiBH,EAAKI,EAAMC,EAAM,CACzC,IAAMj5C,EAAQ44C,EAAIt5C,QAAQ4b,YACpBlD,EAAO4gC,EAAItlC,cACXk+B,EAAI0H,GAAOl5C,CAAAA,EAEjB,MAAO,CACLqB,EAAGy3C,GAAY9gC,EAAKhX,IAAKwwC,EAAExwC,IAAK,EAAGi4C,CAAAA,EACnC33C,EAAGw3C,GAAY9gC,EAAK/W,MAAOuwC,EAAEvwC,MAAO,EAAG+3C,CAAAA,EACvCz3C,EAAGu3C,GAAY9gC,EAAK9W,OAAQswC,EAAEtwC,OAAQ,EAAG+3C,CAAAA,EACzCz3C,EAAGs3C,GAAY9gC,EAAK7W,KAAMqwC,EAAErwC,KAAM,EAAG63C,CAAAA,CACvC,CACF,CAEA,SAAS1H,GAAkBsH,EAAKI,EAAMC,EAAM,CAC1C,GAAM,CAAC1lC,mBAAAA,CAAkB,EAAIqlC,EAAIz0B,SAAS,CAAC,oBAAqB,CAAA,EAC1DnkB,EAAQ44C,EAAIt5C,QAAQmyC,aACpBD,EAAI2H,GAAcn5C,CAAAA,EAClBo5C,EAAO3gD,KAAKC,IAAIsgD,EAAMC,CAAAA,EACtBjhC,EAAO4gC,EAAItlC,cAIX+lC,EAAe9lC,GAAsBhV,GAASyB,CAAAA,EAEpD,MAAO,CACLs5C,QAASR,GAAY,CAACO,GAAgBrhC,EAAKhX,KAAOgX,EAAK7W,KAAMqwC,EAAE8H,QAAS,EAAGF,CAAAA,EAC3EG,SAAUT,GAAY,CAACO,GAAgBrhC,EAAKhX,KAAOgX,EAAK/W,MAAOuwC,EAAE+H,SAAU,EAAGH,CAAAA,EAC9EI,WAAYV,GAAY,CAACO,GAAgBrhC,EAAK9W,QAAU8W,EAAK7W,KAAMqwC,EAAEgI,WAAY,EAAGJ,CAAAA,EACpFK,YAAaX,GAAY,CAACO,GAAgBrhC,EAAK9W,QAAU8W,EAAK/W,MAAOuwC,EAAEiI,YAAa,EAAGL,CAAAA,CACzF,CACF,CAEA,SAASM,GAAcd,EAAK,CAC1B,IAAMe,EAAShB,GAAaC,CAAAA,EACtBvjC,EAAQskC,EAAO14C,MAAQ04C,EAAOx4C,KAC9BiU,EAASukC,EAAOz4C,OAASy4C,EAAO34C,IAChC+d,EAASg6B,GAAiBH,EAAKvjC,EAAQ,EAAGD,EAAS,CAAA,EACnDuC,EAAS25B,GAAkBsH,EAAKvjC,EAAQ,EAAGD,EAAS,CAAA,EAE1D,MAAO,CACLwkC,MAAO,CACL94C,EAAG64C,EAAOx4C,KACVJ,EAAG44C,EAAO34C,IACV6mB,EAAGxS,EACH0S,EAAG3S,EACHuC,OAAAA,CACF,EACAs8B,MAAO,CACLnzC,EAAG64C,EAAOx4C,KAAO4d,EAAOvd,EACxBT,EAAG44C,EAAO34C,IAAM+d,EAAO1d,EACvBwmB,EAAGxS,EAAQ0J,EAAOvd,EAAIud,EAAOzd,EAC7BymB,EAAG3S,EAAS2J,EAAO1d,EAAI0d,EAAOxd,EAC9BoW,OAAQ,CACN2hC,QAAS7gD,KAAKoC,IAAI,EAAG8c,EAAO2hC,QAAU7gD,KAAKoC,IAAIkkB,EAAO1d,EAAG0d,EAAOvd,CAAC,CAAA,EACjE+3C,SAAU9gD,KAAKoC,IAAI,EAAG8c,EAAO4hC,SAAW9gD,KAAKoC,IAAIkkB,EAAO1d,EAAG0d,EAAOzd,CAAC,CAAA,EACnEk4C,WAAY/gD,KAAKoC,IAAI,EAAG8c,EAAO6hC,WAAa/gD,KAAKoC,IAAIkkB,EAAOxd,EAAGwd,EAAOvd,CAAC,CAAA,EACvEi4C,YAAahhD,KAAKoC,IAAI,EAAG8c,EAAO8hC,YAAchhD,KAAKoC,IAAIkkB,EAAOxd,EAAGwd,EAAOzd,CAAC,CAAA,CAC3E,CACF,CACF,CACF,CAEA,SAAS0iB,GAAQ40B,EAAK93C,EAAGC,EAAG6iB,EAAkB,CAC5C,IAAMi2B,EAAQ/4C,IAAM,KACdg5C,EAAQ/4C,IAAM,KAEd44C,EAASf,GAAO,EADLiB,GAASC,IACSnB,GAAaC,EAAKh1B,CAAAA,EAErD,OAAO+1B,IACHE,GAASlF,GAAW7zC,EAAG64C,EAAOx4C,KAAMw4C,EAAO14C,KAAK,KAChD64C,GAASnF,GAAW5zC,EAAG44C,EAAO34C,IAAK24C,EAAOz4C,MAAM,EACtD,CAEA,SAAS64C,GAAUpiC,EAAQ,CACzB,OAAOA,EAAO2hC,SAAW3hC,EAAO4hC,UAAY5hC,EAAO6hC,YAAc7hC,EAAO8hC,WAC1E,CAOA,SAASO,GAAkBlzC,EAAKkqC,EAAM,CACpClqC,EAAIkqC,KAAKA,EAAKlwC,EAAGkwC,EAAKjwC,EAAGiwC,EAAKnpB,EAAGmpB,EAAKjpB,CAAC,CACzC,CAEA,SAASkyB,GAAYjJ,EAAMkJ,EAAQC,EAAU,CAAA,EAAI,CAC/C,IAAMr5C,EAAIkwC,EAAKlwC,IAAMq5C,EAAQr5C,EAAI,CAACo5C,EAAS,EACrCn5C,EAAIiwC,EAAKjwC,IAAMo5C,EAAQp5C,EAAI,CAACm5C,EAAS,EACrCryB,GAAKmpB,EAAKlwC,EAAIkwC,EAAKnpB,IAAMsyB,EAAQr5C,EAAIq5C,EAAQtyB,EAAIqyB,EAAS,GAAKp5C,EAC/DinB,GAAKipB,EAAKjwC,EAAIiwC,EAAKjpB,IAAMoyB,EAAQp5C,EAAIo5C,EAAQpyB,EAAImyB,EAAS,GAAKn5C,EACrE,MAAO,CACLD,EAAGkwC,EAAKlwC,EAAIA,EACZC,EAAGiwC,EAAKjwC,EAAIA,EACZ8mB,EAAGmpB,EAAKnpB,EAAIA,EACZE,EAAGipB,EAAKjpB,EAAIA,EACZpQ,OAAQq5B,EAAKr5B,MACf,CACF,CAEe,IAAMyiC,GAAN,cAAyBjrB,EAAAA,CAEtC,OAAO1rB,GAAK,MAKZ,OAAO9E,SAAW,CAChB2U,cAAe,QACf4H,YAAa,EACbu2B,aAAc,EACdz9B,cAAe,OACfwG,WAAY7iB,QAMd,OAAOy3B,cAAgB,CACrBvU,gBAAiB,kBACjBE,YAAa,eAGf1jB,YAAY8E,EAAK,CACf,MAAK,EAEL,KAAKmD,QAAU3H,OACf,KAAKub,WAAavb,OAClB,KAAKwb,KAAOxb,OACZ,KAAK0d,MAAQ1d,OACb,KAAKyd,OAASzd,OACd,KAAKqc,cAAgBrc,OAEjBwE,GACFsC,OAAOyB,OAAO,KAAM/D,CAAAA,CAExB,CAEA3C,KAAKsN,EAAK,CACR,GAAM,CAACkN,cAAAA,EAAe1U,QAAS,CAACyb,YAAAA,EAAaF,gBAAAA,CAAAA,CAAgB,EAAI,KAC3D,CAACo5B,MAAAA,EAAO2F,MAAAA,CAAAA,EAASF,GAAc,IAAI,EACnCW,EAAcN,GAAUH,EAAMjiC,MAAM,EAAI2iC,GAAqBN,GAEnElzC,EAAIm3B,KAAI,GAEJ2b,EAAM/xB,IAAMosB,EAAMpsB,GAAK+xB,EAAM7xB,IAAMksB,EAAMlsB,KAC3CjhB,EAAI43B,UAAS,EACb2b,EAAYvzC,EAAKmzC,GAAYL,EAAO5lC,EAAeigC,CAAAA,CAAAA,EACnDntC,EAAI4F,KAAI,EACR2tC,EAAYvzC,EAAKmzC,GAAYhG,EAAO,CAACjgC,EAAe4lC,CAAAA,CAAAA,EACpD9yC,EAAI8T,UAAYG,EAChBjU,EAAIiB,KAAK,SAAA,GAGXjB,EAAI43B,UAAS,EACb2b,EAAYvzC,EAAKmzC,GAAYhG,EAAOjgC,CAAAA,CAAAA,EACpClN,EAAI8T,UAAYC,EAChB/T,EAAIiB,KAAI,EAERjB,EAAIq3B,QAAO,CACb,CAEAna,QAAQs0B,EAAQC,EAAQ30B,EAAkB,CACxC,OAAOI,GAAQ,KAAMs0B,EAAQC,EAAQ30B,CAAAA,CACvC,CAEA40B,SAASF,EAAQ10B,EAAkB,CACjC,OAAOI,GAAQ,KAAMs0B,EAAQ,KAAM10B,CAAAA,CACrC,CAEA60B,SAASF,EAAQ30B,EAAkB,CACjC,OAAOI,GAAQ,KAAM,KAAMu0B,EAAQ30B,CAAAA,CACrC,CAEAY,eAAeZ,EAAkB,CAC/B,GAAM,CAAC9iB,EAAAA,EAAGC,EAAAA,EAAGoS,KAAAA,EAAMD,WAAAA,CAAU,EAA6B,KAAKiR,SAAS,CAAC,IAAK,IAAK,OAAQ,cAAeP,CAAAA,EAC1G,MAAO,CACL9iB,EAAGoS,GAAcpS,EAAIqS,GAAQ,EAAIrS,EACjCC,EAAGmS,EAAanS,GAAKA,EAAIoS,GAAQ,CACnC,CACF,CAEAkP,SAASrf,EAAM,CACb,OAAOA,IAAS,IAAM,KAAKqS,MAAQ,EAAI,KAAKD,OAAS,CACvD,CACF,gGCpNMmlC,GAAgB,CACpB,oBACA,oBACA,oBACA,oBACA,oBACA,qBACA,oBACD,EAGKC,GAAoCD,GAAc9/B,IAAI/e,GAASA,EAAM++C,QAAQ,OAAQ,OAASA,EAAAA,QAAQ,IAAK,QAAA,CAAA,EAEjH,SAASC,GAAenhD,EAAW,CACjC,OAAOghD,GAAchhD,EAAIghD,GAAcjhD,MAAM,CAC/C,CAEA,SAASqhD,GAAmBphD,EAAW,CACrC,OAAOihD,GAAkBjhD,EAAIihD,GAAkBlhD,MAAM,CACvD,CAEA,SAASshD,GAAuBj1C,EAAuBpM,EAAW,CAChEoM,OAAAA,EAAQoV,YAAc2/B,GAAenhD,CAAAA,EACrCoM,EAAQkV,gBAAkB8/B,GAAmBphD,CAAAA,EAEtC,EAAEA,CACX,CAEA,SAASshD,GAAwBl1C,EAAuBpM,EAAW,CACjEoM,OAAAA,EAAQkV,gBAAkBlV,EAAQhD,KAAK8X,IAAI,IAAMigC,GAAenhD,GAAAA,CAAAA,EAEzDA,CACT,CAEA,SAASuhD,GAAyBn1C,EAAuBpM,EAAW,CAClEoM,OAAAA,EAAQkV,gBAAkBlV,EAAQhD,KAAK8X,IAAI,IAAMkgC,GAAmBphD,GAAAA,CAAAA,EAE7DA,CACT,CAEA,SAASwhD,GAAaljD,EAAc,CAClC,IAAI0B,EAAI,EAER,MAAO,CAACoM,EAAuBtD,IAAyB,CACtD,IAAMoC,EAAa5M,EAAMwR,eAAehH,CAAAA,EAAcoC,WAElDA,aAAsBmV,GACxBrgB,EAAIshD,GAAwBl1C,EAASpM,CAAAA,EAC5BkL,aAAsB0a,GAC/B5lB,EAAIuhD,GAAyBn1C,EAASpM,CAAAA,EAC7BkL,IACTlL,EAAIqhD,GAAuBj1C,EAASpM,CAAAA,EAExC,CACF,CAEA,SAASyhD,GACPhhC,EACA,CACA,IAAIihC,EAEJ,IAAKA,KAAKjhC,EACR,GAAIA,EAAYihC,CAAAA,EAAGlgC,aAAef,EAAYihC,CAAAA,EAAGpgC,gBAC/C,MAAO,GAIX,MAAO,EACT,CAEA,SAASqgC,GACP7X,EACA,CACA,OAAOA,IAAeA,EAAWtoB,aAAesoB,EAAWxoB,gBAC7D,CAEA,SAASsgC,IAAmC,CAC1C,OAAOx8C,GAASoc,cAAgB,mBAAqBpc,GAASkc,kBAAoB,iBACpF,CAEA,IAAAugC,GAAe,CACb33C,GAAI,SAEJ9E,SAAU,CACRsxB,QAAS,GACTorB,cAAe,EACjB,EAEA1xB,aAAa9xB,EAAcyjD,EAAOh8C,EAA8B,CAC9D,GAAI,CAACA,EAAQ2wB,QACX,OAGF,GAAM,CACJttB,KAAM,CAACyG,SAAAA,CAAAA,EACP9J,QAASi8C,CAAY,EACnB1jD,EAAMsG,OACJ,CAACwO,SAAAA,CAAQ,EAAI4uC,EAEbC,EACJR,GAA0B5xC,CAAAA,GAC1B8xC,GAAyBK,CACxB5uC,GAAAA,GAAYquC,GAA0BruC,CACvCwuC,GAAAA,GAAAA,EAEF,GAAI,CAAC77C,EAAQ+7C,eAAiBG,EAC5B,OAGF,IAAMC,EAAYV,GAAaljD,CAAAA,EAE/BuR,EAAS/Q,QAAQojD,CAAAA,CACnB,CACF,EC5HA,SAASC,GAAe/4C,EAAMhK,EAAOgS,EAAO+b,EAAgBpnB,EAAS,CASnE,IAAMq8C,EAAUr8C,EAAQq8C,SAAWj1B,EAEnC,GAAIi1B,GAAWhxC,EACb,OAAOhI,EAAK+f,MAAM/pB,EAAOA,EAAQgS,CAAAA,EAGnC,IAAMixC,EAAY,CAAA,EAEZC,GAAelxC,EAAQ,IAAMgxC,EAAU,GACzCG,EAAe,EACbC,EAAWpjD,EAAQgS,EAAQ,EAE7BiG,EAAIjY,EACJY,EAAGyiD,EAAcC,EAASrvC,EAAMsvC,EAIpC,IAFAN,EAAUE,GAAAA,EAAkBn5C,EAAKiO,CAAE,EAE9BrX,EAAI,EAAGA,EAAIoiD,EAAU,EAAGpiD,IAAK,CAChC,IAAI68C,EAAO,EACP+F,EAAO,EACPl5B,EAGEm5B,EAAgB3jD,KAAKqE,OAAOvD,EAAI,GAAKsiD,CAAAA,EAAe,EAAIljD,EACxD0jD,EAAc5jD,KAAKC,IAAID,KAAKqE,OAAOvD,EAAI,GAAKsiD,CAAAA,EAAe,EAAGlxC,CAAShS,EAAAA,EACvE2jD,EAAiBD,EAAcD,EAErC,IAAKn5B,EAAIm5B,EAAen5B,EAAIo5B,EAAap5B,IACvCmzB,GAAQzzC,EAAKsgB,CAAE,EAACniB,EAChBq7C,GAAQx5C,EAAKsgB,CAAE,EAACliB,EAGlBq1C,GAAQkG,EACRH,GAAQG,EAGR,IAAMC,EAAY9jD,KAAKqE,MAAMvD,EAAIsiD,CAAAA,EAAe,EAAIljD,EAC9C6jD,EAAU/jD,KAAKC,IAAID,KAAKqE,OAAOvD,EAAI,GAAKsiD,CAAAA,EAAe,EAAGlxC,CAAShS,EAAAA,EACnE,CAACmI,EAAG27C,EAAS17C,EAAG27C,CAAAA,EAAW/5C,EAAKiO,CAAE,EASxC,IAFAqrC,EAAUrvC,EAAO,GAEZqW,EAAIs5B,EAAWt5B,EAAIu5B,EAASv5B,IAC/BrW,EAAO,GAAMnU,KAAKwY,KACfwrC,EAAUrG,IAASzzC,EAAKsgB,CAAAA,EAAGliB,EAAI27C,IAC/BD,EAAU95C,EAAKsgB,CAAE,EAACniB,IAAMq7C,EAAOO,EAAM,EAGpC9vC,EAAOqvC,IACTA,EAAUrvC,EACVovC,EAAer5C,EAAKsgB,CAAE,EACtBi5B,EAAQj5B,GAIZ24B,EAAUE,GAAAA,EAAkBE,EAC5BprC,EAAIsrC,CACN,CAGAN,OAAAA,EAAUE,GAAAA,EAAkBn5C,EAAKo5C,CAAS,EAEnCH,CACT,CAEA,SAASe,GAAiBh6C,EAAMhK,EAAOgS,EAAO+b,EAAgB,CAC5D,IAAI0vB,EAAO,EACPC,EAAS,EACT98C,EAAGse,EAAO/W,EAAGC,EAAGu1C,EAAOsG,EAAUC,EAAUC,EAAYnjC,EAAMJ,EAC3DqiC,EAAY,CAAA,EACZG,EAAWpjD,EAAQgS,EAAQ,EAE3BoyC,EAAOp6C,EAAKhK,CAAAA,EAAOmI,EAEnBk8C,EADOr6C,EAAKo5C,CAAAA,EAAUj7C,EACVi8C,EAElB,IAAKxjD,EAAIZ,EAAOY,EAAIZ,EAAQgS,EAAO,EAAEpR,EAAG,CACtCse,EAAQlV,EAAKpJ,CAAE,EACfuH,GAAK+W,EAAM/W,EAAIi8C,GAAQC,EAAKt2B,EAC5B3lB,EAAI8W,EAAM9W,EACV,IAAM21C,EAAS51C,EAAI,EAEnB,GAAI41C,IAAWJ,EAETv1C,EAAI4Y,GACNA,EAAO5Y,EACP67C,EAAWrjD,GACFwH,EAAIwY,IACbA,EAAOxY,EACP87C,EAAWtjD,GAIb68C,GAAQC,EAASD,EAAOv+B,EAAM/W,GAAK,EAAEu1C,MAChC,CAEL,IAAM4G,EAAY1jD,EAAI,EAEtB,GAAI,CAACoY,GAAcirC,CAAa,GAAA,CAACjrC,GAAckrC,CAAW,EAAA,CAKxD,IAAMK,EAAqBzkD,KAAKC,IAAIkkD,EAAUC,CAAAA,EACxCM,EAAqB1kD,KAAKoC,IAAI+hD,EAAUC,CAAAA,EAE1CK,IAAuBJ,GAAcI,IAAuBD,GAC9DrB,EAAUrhD,KAAK,CACb,GAAGoI,EAAKu6C,CAAmB,EAC3Bp8C,EAAGs1C,CACL,CAAA,EAEE+G,IAAuBL,GAAcK,IAAuBF,GAC9DrB,EAAUrhD,KAAK,CACb,GAAGoI,EAAKw6C,CAAmB,EAC3Br8C,EAAGs1C,CACL,CAAA,EAMA78C,EAAI,GAAK0jD,IAAcH,GAEzBlB,EAAUrhD,KAAKoI,EAAKs6C,CAAU,CAAA,EAIhCrB,EAAUrhD,KAAKsd,CAAAA,EACfy+B,EAAQI,EACRL,EAAS,EACT18B,EAAOJ,EAAOxY,EACd67C,EAAWC,EAAWC,EAAavjD,EAEvC,CAEA,OAAOqiD,CACT,CAEA,SAASwB,GAAsBz3C,EAAS,CACtC,GAAIA,EAAQ2Y,WAAY,CACtB,IAAM3b,EAAOgD,EAAQwB,MACrB,OAAOxB,EAAQ2Y,WACf,OAAO3Y,EAAQwB,MACf1I,OAAO4+C,eAAe13C,EAAS,OAAQ,CACrC23C,aAAc,GACdC,WAAY,GACZC,SAAU,GACVx9C,MAAO2C,CACT,CAAA,EAEJ,CAEA,SAAS86C,GAAmB5lD,EAAO,CACjCA,EAAM8K,KAAKyG,SAAS/Q,QAASsN,GAAY,CACvCy3C,GAAsBz3C,CAAAA,CACxB,CAAA,CACF,CAEA,SAAS+3C,GAA0C96C,EAAMgV,EAAQ,CAC/D,IAAM+lC,EAAa/lC,EAAOte,OAEtBX,EAAQ,EACRgS,EAEE,CAAC9H,OAAAA,CAAM,EAAID,EACX,CAAClK,IAAAA,EAAKmC,IAAAA,EAAK8I,WAAAA,EAAYC,WAAAA,CAAU,EAAIf,EAAOa,cAAa,EAE/D,OAAIC,IACFhL,EAAQw/B,GAAYhW,GAAavK,EAAQ/U,EAAOG,KAAMtK,CAAK4pB,EAAAA,GAAI,EAAGq7B,EAAa,CAAA,GAE7E/5C,EACF+G,EAAQwtB,GAAYhW,GAAavK,EAAQ/U,EAAOG,KAAMnI,CAAAA,EAAK0nB,GAAK,EAAG5pB,EAAOglD,CAAchlD,EAAAA,EAExFgS,EAAQgzC,EAAahlD,EAGhB,CAACA,MAAAA,EAAOgS,MAAAA,CAAK,CACtB,CAEA,IAAAizC,GAAe,CACbn6C,GAAI,aAEJ9E,SAAU,CACRk/C,UAAW,UACX5tB,QAAS,EACX,EAEA6tB,qBAAsB,CAACjmD,EAAO+X,EAAMtQ,IAAY,CAC9C,GAAI,CAACA,EAAQ2wB,QAAS,CAEpBwtB,GAAmB5lD,CAAAA,EACnB,OAIF,IAAM6uB,EAAiB7uB,EAAMwd,MAE7Bxd,EAAM8K,KAAKyG,SAAS/Q,QAAQ,CAACsN,EAAStD,IAAiB,CACrD,GAAM,CAAC8E,MAAAA,EAAO0B,UAAAA,CAAAA,EAAalD,EACrB/C,EAAO/K,EAAMwR,eAAehH,CAAAA,EAC5BM,EAAOwE,GAASxB,EAAQhD,KAO9B,GALIpG,GAAQ,CAACsM,EAAWhR,EAAMyH,QAAQuJ,SAAU,CAAA,IAAM,KAKlD,CAACjG,EAAK6B,WAAWgD,mBAEnB,OAGF,IAAMs2C,EAAQlmD,EAAMwN,OAAOzC,EAAK2F,OAAO,EAMvC,GALIw1C,EAAM/lD,OAAS,UAAY+lD,EAAM/lD,OAAS,QAK1CH,EAAMyH,QAAQmL,QAEhB,OAGF,GAAI,CAAC9R,MAAAA,EAAOgS,MAAAA,CAAAA,EAAS+yC,GAA0C96C,EAAMD,CAAAA,EAC/Dq7C,EAAY1+C,EAAQ0+C,WAAa,EAAIt3B,EAC3C,GAAI/b,GAASqzC,EAAW,CAEtBZ,GAAsBz3C,CAAAA,EACtB,OAGEgM,GAAcxK,CAAQ,IAIxBxB,EAAQwB,MAAQxE,EAChB,OAAOgD,EAAQhD,KACflE,OAAO4+C,eAAe13C,EAAS,OAAQ,CACrC23C,aAAc,GACdC,WAAY,GACZvjD,IAAK,UAAW,CACd,OAAO,KAAKskB,UACd,EACAnkB,IAAK,SAASirC,EAAG,CACf,KAAKj+B,MAAQi+B,CACf,CACF,CAAA,GAIF,IAAIwW,EACJ,OAAQt8C,EAAQu+C,UAAS,CACzB,IAAK,OACHjC,EAAYF,GAAe/4C,EAAMhK,EAAOgS,EAAO+b,EAAgBpnB,CAAAA,EAC/D,MACF,IAAK,UACHs8C,EAAYe,GAAiBh6C,EAAMhK,EAAOgS,EAAO+b,CAAAA,EACjD,MACF,QACE,MAAM,IAAI1F,MAAM,qCAAqC1hB,EAAQu+C,SAAS,GAAG,CAC3E,CAEAl4C,EAAQ2Y,WAAas9B,CACvB,CAAA,CACF,EAEA7M,QAAQl3C,EAAO,CACb4lD,GAAmB5lD,CAAAA,CACrB,CACF,EC5RO,SAAS8/C,GAAU35B,EAAM5hB,EAAQykC,EAAU,CAChD,IAAMwW,EAAWr5B,EAAKq5B,SAChBz/B,EAASoG,EAAKpG,OACdqmC,EAAU7hD,EAAOwb,OACjBupB,EAAQ,CAAA,EAEd,QAAW5iB,KAAW84B,EAAU,CAC9B,GAAI,CAAC1+C,MAAAA,EAAO+H,IAAAA,CAAAA,EAAO6d,EACnB7d,EAAMw9C,GAAgBvlD,EAAO+H,EAAKkX,CAAAA,EAElC,IAAM+hC,EAASwE,GAAWtd,EAAUjpB,EAAOjf,CAAAA,EAAQif,EAAOlX,CAAAA,EAAM6d,EAAQthB,IAAI,EAE5E,GAAI,CAACb,EAAOi7C,SAAU,CAGpBlW,EAAM5mC,KAAK,CACTi8B,OAAQjY,EACRniB,OAAQu9C,EACRhhD,MAAOif,EAAOjf,CAAM,EACpB+H,IAAKkX,EAAOlX,CAAI,CAClB,CAAA,EACA,SAIF,IAAM09C,EAAiBpG,GAAe57C,EAAQu9C,CAAAA,EAE9C,QAAW0E,KAAOD,EAAgB,CAChC,IAAME,EAAYH,GAAWtd,EAAUod,EAAQI,EAAI1lD,KAAK,EAAGslD,EAAQI,EAAI39C,GAAG,EAAG29C,EAAIphD,IAAI,EAC/EshD,EAAcC,GAAcjgC,EAAS3G,EAAQ0mC,CAAAA,EAEnD,QAAWG,KAAcF,EACvBpd,EAAM5mC,KAAK,CACTi8B,OAAQioB,EACRriD,OAAQiiD,EACR1lD,MAAO,CACL,CAACkoC,CAAAA,EAAW6d,GAAS/E,EAAQ2E,EAAW,QAAS7lD,KAAKoC,GAAG,CAC3D,EACA6F,IAAK,CACH,CAACmgC,CAAAA,EAAW6d,GAAS/E,EAAQ2E,EAAW,MAAO7lD,KAAKC,GAAG,CACzD,CACF,CAAA,CAEJ,CACF,CACA,OAAOyoC,CACT,CAEO,SAASgd,GAAWtd,EAAUzQ,EAAO7a,EAAMtY,EAAM,CACtD,GAAIA,EACF,OAEF,IAAItE,EAAQy3B,EAAMyQ,CAAS,EACvBngC,EAAM6U,EAAKsrB,CAAS,EAExB,OAAIA,IAAa,UACfloC,EAAQi4C,GAAgBj4C,CAAAA,EACxB+H,EAAMkwC,GAAgBlwC,CAAAA,GAEjB,CAACmgC,SAAAA,EAAUloC,MAAAA,EAAO+H,IAAAA,CAAG,CAC9B,CAEO,SAASi+C,GAAoBC,EAAU5gC,EAAM,CAClD,GAAM,CAACld,EAAAA,EAAI,KAAMC,EAAAA,EAAI,IAAI,EAAI69C,GAAY,CAAA,EACnCC,EAAa7gC,EAAKpG,OAClBA,EAAS,CAAA,EACfoG,OAAAA,EAAKq5B,SAASh/C,QAAQ,CAAC,CAACM,MAAAA,EAAO+H,IAAAA,CAAG,IAAM,CACtCA,EAAMw9C,GAAgBvlD,EAAO+H,EAAKm+C,CAAAA,EAClC,IAAMzuB,EAAQyuB,EAAWlmD,CAAM,EACzB4c,EAAOspC,EAAWn+C,CAAI,EACxBK,IAAM,MACR6W,EAAOrd,KAAK,CAACuG,EAAGsvB,EAAMtvB,EAAGC,EAAAA,CAAC,CAAA,EAC1B6W,EAAOrd,KAAK,CAACuG,EAAGyU,EAAKzU,EAAGC,EAAAA,CAAC,CAAA,GAChBD,IAAM,OACf8W,EAAOrd,KAAK,CAACuG,EAAAA,EAAGC,EAAGqvB,EAAMrvB,CAAC,CAAA,EAC1B6W,EAAOrd,KAAK,CAACuG,EAAAA,EAAGC,EAAGwU,EAAKxU,CAAC,CAAA,EAE7B,CAAA,EACO6W,CACT,CAEO,SAASsmC,GAAgBvlD,EAAO+H,EAAKkX,EAAQ,CAClD,KAAMlX,EAAM/H,EAAO+H,IAAO,CACxB,IAAMmX,EAAQD,EAAOlX,CAAI,EACzB,GAAI,CAACmV,MAAMgC,EAAM/W,CAAC,GAAK,CAAC+U,MAAMgC,EAAM9W,CAAC,EACnC,KAEJ,CACA,OAAOL,CACT,CAEA,SAASg+C,GAAS9tC,EAAGrP,EAAGlF,EAAM/D,EAAI,CAChC,OAAIsY,GAAKrP,EACAjJ,EAAGsY,EAAEvU,CAAAA,EAAOkF,EAAElF,CAAK,CAAA,EAErBuU,EAAIA,EAAEvU,CAAK,EAAGkF,EAAIA,EAAElF,CAAK,EAAG,CACrC,CCnFO,SAASyiD,GAAoBF,EAAU5gC,EAAM,CAClD,IAAIpG,EAAS,CAAA,EACT5a,EAAQ,GAEZ,OAAIiC,GAAQ2/C,CAAW,GACrB5hD,EAAQ,GAER4a,EAASgnC,GAEThnC,EAAS+mC,GAAoBC,EAAU5gC,CAAAA,EAGlCpG,EAAOte,OAAS,IAAIk+C,GAAY,CACrC5/B,OAAAA,EACAtY,QAAS,CAACk2C,QAAS,CAAC,EACpBx4C,MAAAA,EACAwjB,UAAWxjB,CACb,CAAA,EAAK,IACP,CAEO,SAAS+hD,GAAiBvoB,EAAQ,CACvC,OAAOA,GAAUA,EAAOzuB,OAAS,EACnC,CC5BO,SAASi3C,GAAeC,EAASl9C,EAAOm9C,EAAW,CAExD,IAAIn3C,EADWk3C,EAAQl9C,CAAM,EACXgG,KACZo3C,EAAU,CAACp9C,CAAM,EACnB3F,EAEJ,GAAI,CAAC8iD,EACH,OAAOn3C,EAGT,KAAOA,IAAS,IAASo3C,EAAQrpC,QAAQ/N,CAAAA,IAAU,IAAI,CACrD,GAAI,CAACvF,GAASuF,CAAO,EACnB,OAAOA,EAIT,GADA3L,EAAS6iD,EAAQl3C,CAAK,EAClB,CAAC3L,EACH,MAAO,GAGT,GAAIA,EAAOuwC,QACT,OAAO5kC,EAGTo3C,EAAQ5kD,KAAKwN,CAAAA,EACbA,EAAO3L,EAAO2L,IAChB,CAEA,MAAO,EACT,CAOO,SAASq3C,GAAYphC,EAAMjc,EAAO4I,EAAO,CAE9C,IAAM5C,EAAOs3C,GAAgBrhC,CAAAA,EAE7B,GAAIzf,GAASwJ,CAAO,EAClB,OAAO8N,MAAM9N,EAAK/H,KAAK,EAAI,GAAQ+H,EAGrC,IAAI3L,EAASkjD,WAAWv3C,CAAAA,EAExB,OAAIvF,GAASpG,CAAW3D,GAAAA,KAAKqE,MAAMV,CAAAA,IAAYA,EACtCmjD,GAAkBx3C,EAAK,CAAE,EAAEhG,EAAO3F,EAAQuO,CAAAA,EAG5C,CAAC,SAAU,QAAS,MAAO,QAAS,SAASmL,QAAQ/N,CAAAA,GAAS,GAAKA,CAC5E,CAEA,SAASw3C,GAAkBC,EAASz9C,EAAO3F,EAAQuO,EAAO,CAKxD,OAJI60C,IAAY,KAAOA,IAAY,OACjCpjD,EAAS2F,EAAQ3F,GAGfA,IAAW2F,GAAS3F,EAAS,GAAKA,GAAUuO,EACvC,GAGFvO,CACT,CAOO,SAASqjD,GAAgB13C,EAAMzH,EAAO,CAC3C,IAAI85B,EAAQ,KACZ,OAAIryB,IAAS,QACXqyB,EAAQ95B,EAAMY,OACL6G,IAAS,MAClBqyB,EAAQ95B,EAAMU,IACLzC,GAASwJ,CAAO,EAEzBqyB,EAAQ95B,EAAM4Q,iBAAiBnJ,EAAK/H,KAAK,EAChCM,EAAMsU,eACfwlB,EAAQ95B,EAAMsU,aAAY,GAErBwlB,CACT,CAQO,SAASslB,GAAgB33C,EAAMzH,EAAO+R,EAAY,CACvD,IAAIrS,EAEJ,OAAI+H,IAAS,QACX/H,EAAQqS,EACCtK,IAAS,MAClB/H,EAAQM,EAAMhB,QAAQmB,QAAUH,EAAM5H,IAAM4H,EAAMzF,IACzC0D,GAASwJ,CAAO,EAEzB/H,EAAQ+H,EAAK/H,MAEbA,EAAQM,EAAMm6B,aAAY,EAErBz6B,CACT,CAKA,SAASq/C,GAAgBrhC,EAAM,CAC7B,IAAM1e,EAAU0e,EAAK1e,QACfqgD,EAAargD,EAAQyI,KACvBA,EAAOS,GAAem3C,GAAcA,EAAWvjD,OAAQujD,CAAAA,EAM3D,OAJI53C,IAASpQ,SACXoQ,EAAO,CAAC,CAACzI,EAAQub,iBAGf9S,IAAS,IAASA,IAAS,KACtB,GAGLA,IAAS,GACJ,SAEFA,CACT,CC1HO,SAAS63C,GAAgBppB,EAAQ,CACtC,GAAM,CAACl2B,MAAAA,EAAOyB,MAAAA,EAAOic,KAAAA,CAAAA,EAAQwY,EACvB5e,EAAS,CAAA,EACTy/B,EAAWr5B,EAAKq5B,SAChBwI,EAAe7hC,EAAKpG,OACpBkoC,EAAaC,GAAcz/C,EAAOyB,CAAAA,EACxC+9C,EAAWvlD,KAAKukD,GAAoB,CAACh+C,EAAG,KAAMC,EAAGT,EAAMY,QAAS8c,CAAAA,CAAAA,EAEhE,QAASzkB,EAAI,EAAGA,EAAI89C,EAAS/9C,OAAQC,IAAK,CACxC,IAAMglB,EAAU84B,EAAS99C,CAAE,EAC3B,QAAS0pB,EAAI1E,EAAQ5lB,MAAOsqB,GAAK1E,EAAQ7d,IAAKuiB,IAC5C+8B,GAAepoC,EAAQioC,EAAa58B,CAAAA,EAAI68B,CAAAA,CAE5C,CACA,OAAO,IAAItI,GAAY,CAAC5/B,OAAAA,EAAQtY,QAAS,CAAA,CAAE,CAAA,CAC7C,CAOA,SAASygD,GAAcz/C,EAAOyB,EAAO,CACnC,IAAMk+C,EAAQ,CAAA,EACRlrB,EAAQz0B,EAAMiE,wBAAwB,MAAA,EAE5C,QAAShL,EAAI,EAAGA,EAAIw7B,EAAMz7B,OAAQC,IAAK,CACrC,IAAMqJ,EAAOmyB,EAAMx7B,CAAE,EACrB,GAAIqJ,EAAKb,QAAUA,EACjB,MAEGa,EAAK4D,QACRy5C,EAAMC,QAAQt9C,EAAK+C,OAAO,CAE9B,CACA,OAAOs6C,CACT,CAOA,SAASD,GAAepoC,EAAQuoC,EAAaL,EAAY,CACvD,IAAMM,EAAY,CAAA,EAClB,QAASn9B,EAAI,EAAGA,EAAI68B,EAAWxmD,OAAQ2pB,IAAK,CAC1C,IAAMjF,EAAO8hC,EAAW78B,CAAE,EACpB,CAACmN,MAAAA,EAAO7a,KAAAA,EAAMsC,MAAAA,CAAAA,EAASwoC,GAAUriC,EAAMmiC,EAAa,GAAA,EAE1D,GAAI,GAACtoC,GAAUuY,GAAS7a,IAGxB,GAAI6a,EAEFgwB,EAAUF,QAAQroC,CAAAA,UAElBD,EAAOrd,KAAKsd,CAAAA,EACR,CAACtC,EAEH,MAGN,CACAqC,EAAOrd,KAAQ6lD,GAAAA,CAAAA,CACjB,CAQA,SAASC,GAAUriC,EAAMmiC,EAAatf,EAAU,CAC9C,IAAMhpB,EAAQmG,EAAK+5B,YAAYoI,EAAatf,CAAAA,EAC5C,GAAI,CAAChpB,EACH,MAAO,CAAA,EAGT,IAAMyoC,EAAazoC,EAAMgpB,CAAS,EAC5BwW,EAAWr5B,EAAKq5B,SAChBwH,EAAa7gC,EAAKpG,OACpBwY,EAAQ,GACR7a,EAAO,GACX,QAAShc,EAAI,EAAGA,EAAI89C,EAAS/9C,OAAQC,IAAK,CACxC,IAAMglB,EAAU84B,EAAS99C,CAAE,EACrBgnD,EAAa1B,EAAWtgC,EAAQ5lB,KAAK,EAAEkoC,CAAS,EAChD2f,EAAY3B,EAAWtgC,EAAQ7d,GAAG,EAAEmgC,CAAS,EACnD,GAAI8T,GAAW2L,EAAYC,EAAYC,CAAY,EAAA,CACjDpwB,EAAQkwB,IAAeC,EACvBhrC,EAAO+qC,IAAeE,EACtB,MAEJ,CACA,MAAO,CAACpwB,MAAAA,EAAO7a,KAAAA,EAAMsC,MAAAA,CAAK,CAC5B,CCzGO,IAAM4oC,GAAN,KAAMA,CACXppD,YAAYmJ,EAAM,CAChB,KAAKM,EAAIN,EAAKM,EACd,KAAKC,EAAIP,EAAKO,EACd,KAAK4W,OAASnX,EAAKmX,MACrB,CAEAs+B,YAAYnvC,EAAK6yC,EAAQn5C,EAAM,CAC7B,GAAM,CAACM,EAAAA,EAAGC,EAAAA,EAAG4W,OAAAA,CAAM,EAAI,KACvBgiC,OAAAA,EAASA,GAAU,CAAChhD,MAAO,EAAG+H,IAAK+X,EAAG,EACtC3R,EAAIsW,IAAItc,EAAGC,EAAG4W,EAAQgiC,EAAOj5C,IAAKi5C,EAAOhhD,MAAO,EAAI,EAC7C,CAAC6H,EAAKm5C,MACf,CAEA5B,YAAYlgC,EAAO,CACjB,GAAM,CAAC/W,EAAAA,EAAGC,EAAAA,EAAG4W,OAAAA,CAAM,EAAI,KACjBwB,EAAQtB,EAAMsB,MACpB,MAAO,CACLrY,EAAGA,EAAIrI,KAAKogB,IAAIM,CAASxB,EAAAA,EACzB5W,EAAGA,EAAItI,KAAKsgB,IAAII,CAASxB,EAAAA,EACzBwB,MAAAA,CACF,CACF,CACF,ECdO,SAASunC,GAAWlqB,EAAQ,CACjC,GAAM,CAAC3+B,MAAAA,EAAOkQ,KAAAA,EAAMiW,KAAAA,CAAAA,EAAQwY,EAE5B,GAAIh0B,GAASuF,CAAO,EAClB,OAAO44C,GAAe9oD,EAAOkQ,CAAAA,EAG/B,GAAIA,IAAS,QACX,OAAO63C,GAAgBppB,CAAAA,EAGzB,GAAIzuB,IAAS,QACX,MAAO,GAGT,IAAM62C,EAAWgC,GAAgBpqB,CAAAA,EAEjC,OAAIooB,aAAoB6B,GACf7B,EAGFE,GAAoBF,EAAU5gC,CAAAA,CACvC,CAMA,SAAS2iC,GAAe9oD,EAAOkK,EAAO,CACpC,IAAMa,EAAO/K,EAAMwR,eAAetH,CAAAA,EAElC,OADgBa,GAAQ/K,EAAMikB,iBAAiB/Z,CAAAA,EAC9Ba,EAAK+C,QAAU,IAClC,CAEA,SAASi7C,GAAgBpqB,EAAQ,CAG/B,OAFcA,EAAOl2B,OAAS,CAAA,GAEpBogB,yBACDmgC,GAAwBrqB,CAAAA,EAE1BsqB,GAAsBtqB,CAAAA,CAC/B,CAGA,SAASsqB,GAAsBtqB,EAAQ,CACrC,GAAM,CAACl2B,MAAAA,EAAQ,CAAA,EAAIyH,KAAAA,CAAAA,EAAQyuB,EACrB4D,EAAQqlB,GAAgB13C,EAAMzH,CAAAA,EAEpC,GAAIkC,GAAS43B,CAAQ,EAAA,CACnB,IAAMlnB,EAAa5S,EAAM0S,aAAY,EAErC,MAAO,CACLlS,EAAGoS,EAAaknB,EAAQ,KACxBr5B,EAAGmS,EAAa,KAAOknB,CACzB,EAGF,OAAO,IACT,CAEA,SAASymB,GAAwBrqB,EAAQ,CACvC,GAAM,CAACl2B,MAAAA,EAAOyH,KAAAA,CAAAA,EAAQyuB,EAChBl3B,EAAUgB,EAAMhB,QAChBhG,EAASgH,EAAM8K,UAAS,EAAG9R,OAC3BX,EAAQ2G,EAAQmB,QAAUH,EAAMzF,IAAMyF,EAAM5H,IAC5CsH,EAAQ0/C,GAAgB33C,EAAMzH,EAAO3H,CAAAA,EACrCyD,EAAS,CAAA,EAEf,GAAIkD,EAAQiV,KAAK+K,SAAU,CACzB,IAAMnK,EAAS7U,EAAMogB,yBAAyB,EAAG/nB,CAAAA,EACjD,OAAO,IAAI8nD,GAAU,CACnB3/C,EAAGqU,EAAOrU,EACVC,EAAGoU,EAAOpU,EACV4W,OAAQrX,EAAM+f,8BAA8BrgB,CAAAA,CAC9C,CAAA,EAGF,QAASzG,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAC5B6C,EAAO7B,KAAK+F,EAAMogB,yBAAyBnnB,EAAGyG,CAAAA,CAAAA,EAEhD,OAAO5D,CACT,CCzFO,SAAS2kD,GAAUj6C,EAAK0vB,EAAQ5pB,EAAM,CAC3C,IAAMxQ,EAASskD,GAAWlqB,CAAAA,EACpB,CAAC3+B,MAAAA,EAAOkK,MAAAA,EAAOic,KAAAA,EAAM1d,MAAAA,EAAO0C,KAAAA,CAAI,EAAIwzB,EACpCwqB,EAAWhjC,EAAK1e,QAChBqgD,EAAaqB,EAASj5C,KACtBrM,EAAQslD,EAASnmC,gBACjB,CAAComC,MAAAA,EAAQvlD,EAAOukD,MAAAA,EAAQvkD,CAAK,EAAIikD,GAAc,CAAA,EAC/C/8C,EAAO/K,EAAMwR,eAAetH,CAAAA,EAC5B2K,EAAO8hC,GAAmB32C,EAAO+K,CAAAA,EACnCxG,GAAU4hB,EAAKpG,OAAOte,SACxB4lC,GAASp4B,EAAK8F,CAAAA,EACds0C,GAAOp6C,EAAK,CAACkX,KAAAA,EAAM5hB,OAAAA,EAAQ6kD,MAAAA,EAAOhB,MAAAA,EAAOrzC,KAAAA,EAAMtM,MAAAA,EAAO0C,KAAAA,EAAM0J,KAAAA,CAAI,CAAA,EAChE2yB,GAAWv4B,CAAAA,EAEf,CAEA,SAASo6C,GAAOp6C,EAAK3K,EAAK,CACxB,GAAM,CAAC6hB,KAAAA,EAAM5hB,OAAAA,EAAQ6kD,MAAAA,EAAOhB,MAAAA,EAAOrzC,KAAAA,EAAMtM,MAAAA,EAAOoM,KAAAA,CAAAA,EAAQvQ,EAClD0kC,EAAW7iB,EAAKhhB,MAAQ,QAAUb,EAAI6G,KAE5C8D,EAAIm3B,KAAI,EAER,IAAIkjB,EAAYlB,EACZA,IAAUgB,IACRpgB,IAAa,KACfugB,GAAat6C,EAAK1K,EAAQwQ,EAAK5L,GAAG,EAClC+G,GAAKjB,EAAK,CAACkX,KAAAA,EAAM5hB,OAAAA,EAAQV,MAAOulD,EAAO3gD,MAAAA,EAAOugC,SAAAA,EAAUn0B,KAAAA,CAAI,CAAA,EAC5D5F,EAAIq3B,QAAO,EACXr3B,EAAIm3B,KAAI,EACRmjB,GAAat6C,EAAK1K,EAAQwQ,EAAK1L,MAAM,GAC5B2/B,IAAa,MACtBwgB,GAAev6C,EAAK1K,EAAQwQ,EAAKzL,IAAI,EACrC4G,GAAKjB,EAAK,CAACkX,KAAAA,EAAM5hB,OAAAA,EAAQV,MAAOukD,EAAO3/C,MAAAA,EAAOugC,SAAAA,EAAUn0B,KAAAA,CAAI,CAAA,EAC5D5F,EAAIq3B,QAAO,EACXr3B,EAAIm3B,KAAI,EACRojB,GAAev6C,EAAK1K,EAAQwQ,EAAK3L,KAAK,EACtCkgD,EAAYF,IAGhBl5C,GAAKjB,EAAK,CAACkX,KAAAA,EAAM5hB,OAAAA,EAAQV,MAAOylD,EAAW7gD,MAAAA,EAAOugC,SAAAA,EAAUn0B,KAAAA,CAAI,CAAA,EAEhE5F,EAAIq3B,QAAO,CACb,CAEA,SAASijB,GAAat6C,EAAK1K,EAAQklD,EAAO,CACxC,GAAM,CAACjK,SAAAA,EAAUz/B,OAAAA,CAAAA,EAAUxb,EACvBg0B,EAAQ,GACRmxB,EAAW,GAEfz6C,EAAI43B,UAAS,EACb,QAAWngB,KAAW84B,EAAU,CAC9B,GAAM,CAAC1+C,MAAAA,EAAO+H,IAAAA,CAAAA,EAAO6d,EACfS,EAAapH,EAAOjf,CAAM,EAC1BsmB,EAAYrH,EAAOsmC,GAAgBvlD,EAAO+H,EAAKkX,CAAQ,CAAA,EACzDwY,GACFtpB,EAAI63B,OAAO3f,EAAWle,EAAGke,EAAWje,CAAC,EACrCqvB,EAAQ,KAERtpB,EAAI83B,OAAO5f,EAAWle,EAAGwgD,CAAAA,EACzBx6C,EAAI83B,OAAO5f,EAAWle,EAAGke,EAAWje,CAAC,GAEvCwgD,EAAW,CAAC,CAACnlD,EAAO65C,YAAYnvC,EAAKyX,EAAS,CAACjP,KAAMiyC,CAAQ,CAAA,EACzDA,EACFz6C,EAAIiqC,UAAS,EAEbjqC,EAAI83B,OAAO3f,EAAUne,EAAGwgD,CAAAA,CAE5B,CAEAx6C,EAAI83B,OAAOxiC,EAAOg0B,MAAK,EAAGtvB,EAAGwgD,CAAAA,EAC7Bx6C,EAAIiqC,UAAS,EACbjqC,EAAI4F,KAAI,CACV,CAEA,SAAS20C,GAAev6C,EAAK1K,EAAQolD,EAAO,CAC1C,GAAM,CAACnK,SAAAA,EAAUz/B,OAAAA,CAAAA,EAAUxb,EACvBg0B,EAAQ,GACRmxB,EAAW,GAEfz6C,EAAI43B,UAAS,EACb,QAAWngB,KAAW84B,EAAU,CAC9B,GAAM,CAAC1+C,MAAAA,EAAO+H,IAAAA,CAAAA,EAAO6d,EACfS,EAAapH,EAAOjf,CAAM,EAC1BsmB,EAAYrH,EAAOsmC,GAAgBvlD,EAAO+H,EAAKkX,CAAQ,CAAA,EACzDwY,GACFtpB,EAAI63B,OAAO3f,EAAWle,EAAGke,EAAWje,CAAC,EACrCqvB,EAAQ,KAERtpB,EAAI83B,OAAO4iB,EAAOxiC,EAAWje,CAAC,EAC9B+F,EAAI83B,OAAO5f,EAAWle,EAAGke,EAAWje,CAAC,GAEvCwgD,EAAW,CAAC,CAACnlD,EAAO65C,YAAYnvC,EAAKyX,EAAS,CAACjP,KAAMiyC,CAAQ,CAAA,EACzDA,EACFz6C,EAAIiqC,UAAS,EAEbjqC,EAAI83B,OAAO4iB,EAAOviC,EAAUle,CAAC,CAEjC,CAEA+F,EAAI83B,OAAO4iB,EAAOplD,EAAOg0B,MAAK,EAAGrvB,CAAC,EAClC+F,EAAIiqC,UAAS,EACbjqC,EAAI4F,KAAI,CACV,CAEA,SAAS3E,GAAKjB,EAAK3K,EAAK,CACtB,GAAM,CAAC6hB,KAAAA,EAAM5hB,OAAAA,EAAQykC,SAAAA,EAAUnlC,MAAAA,EAAO4E,MAAAA,EAAOoM,KAAAA,CAAAA,EAAQvQ,EAC/Ck7C,EAAWM,GAAU35B,EAAM5hB,EAAQykC,CAAAA,EAEzC,OAAW,CAACrK,OAAQirB,EAAKrlD,OAAQiiD,EAAK1lD,MAAAA,EAAO+H,IAAAA,CAAG,IAAK22C,EAAU,CAC7D,GAAM,CAAC38B,MAAO,CAACG,gBAAAA,EAAkBnf,CAAAA,EAAS,CAAA,CAAE,EAAI+lD,EAC1CC,EAAWtlD,IAAW,GAE5B0K,EAAIm3B,KAAI,EACRn3B,EAAI8T,UAAYC,EAEhB8mC,GAAW76C,EAAKxG,EAAOoM,EAAMg1C,GAAYvD,GAAWtd,EAAUloC,EAAO+H,CAAAA,CAAAA,EAErEoG,EAAI43B,UAAS,EAEb,IAAM6iB,EAAW,CAAC,CAACvjC,EAAKi4B,YAAYnvC,EAAK26C,CAAAA,EAErCxkD,EACJ,GAAIykD,EAAU,CACRH,EACFz6C,EAAIiqC,UAAS,EAEb6Q,GAAmB96C,EAAK1K,EAAQsE,EAAKmgC,CAAAA,EAGvC,IAAMghB,EAAa,CAAC,CAACzlD,EAAO65C,YAAYnvC,EAAKu3C,EAAK,CAAC/uC,KAAMiyC,EAAU9gD,QAAS,EAAI,CAAA,EAChFxD,EAAOskD,GAAYM,EACd5kD,GACH2kD,GAAmB96C,EAAK1K,EAAQzD,EAAOkoC,CAAAA,EAI3C/5B,EAAIiqC,UAAS,EACbjqC,EAAIiB,KAAK9K,EAAO,UAAY,SAAS,EAErC6J,EAAIq3B,QAAO,CACb,CACF,CAEA,SAASwjB,GAAW76C,EAAKxG,EAAOoM,EAAMitC,EAAQ,CAC5C,IAAM9sC,EAAYvM,EAAMzI,MAAMgV,UACxB,CAACg0B,SAAAA,EAAUloC,MAAAA,EAAO+H,IAAAA,CAAG,EAAIi5C,GAAU,CAAA,EAEzC,GAAI9Y,IAAa,KAAOA,IAAa,IAAK,CACxC,IAAI1/B,EAAMH,EAAKC,EAAOC,EAElB2/B,IAAa,KACf1/B,EAAOxI,EACPqI,EAAM6L,EAAU7L,IAChBC,EAAQP,EACRQ,EAAS2L,EAAU3L,SAEnBC,EAAO0L,EAAU1L,KACjBH,EAAMrI,EACNsI,EAAQ4L,EAAU5L,MAClBC,EAASR,GAGXoG,EAAI43B,UAAS,EAEThyB,IACFvL,EAAO1I,KAAKoC,IAAIsG,EAAMuL,EAAKvL,IAAI,EAC/BF,EAAQxI,KAAKC,IAAIuI,EAAOyL,EAAKzL,KAAK,EAClCD,EAAMvI,KAAKoC,IAAImG,EAAK0L,EAAK1L,GAAG,EAC5BE,EAASzI,KAAKC,IAAIwI,EAAQwL,EAAKxL,MAAM,GAGvC4F,EAAIkqC,KAAK7vC,EAAMH,EAAKC,EAAQE,EAAMD,EAASF,CAAAA,EAC3C8F,EAAI4F,KAAI,EAEZ,CAEA,SAASk1C,GAAmB96C,EAAK1K,EAAQyb,EAAOgpB,EAAU,CACxD,IAAMihB,EAAoB1lD,EAAO27C,YAAYlgC,EAAOgpB,CAAAA,EAChDihB,GACFh7C,EAAI83B,OAAOkjB,EAAkBhhD,EAAGghD,EAAkB/gD,CAAC,CAEvD,CC9KA,IAAAgB,GAAe,CACb0B,GAAI,SAEJs+C,oBAAoBlqD,EAAOyjD,EAAOh8C,EAAS,CACzC,IAAMqL,GAAS9S,EAAM8K,KAAKyG,UAAY,CAAA,GAAI9P,OACpC2lD,EAAU,CAAA,EACZr8C,EAAMrJ,EAAGykB,EAAMwY,EAEnB,IAAKj9B,EAAI,EAAGA,EAAIoR,EAAO,EAAEpR,EACvBqJ,EAAO/K,EAAMwR,eAAe9P,CAAAA,EAC5BykB,EAAOpb,EAAK+C,QACZ6wB,EAAS,KAELxY,GAAQA,EAAK1e,SAAW0e,aAAgBw5B,KAC1ChhB,EAAS,CACPmW,QAAS90C,EAAMikB,iBAAiBviB,CAAAA,EAChCwI,MAAOxI,EACPwO,KAAMq3C,GAAYphC,EAAMzkB,EAAGoR,CAAAA,EAC3B9S,MAAAA,EACAmL,KAAMJ,EAAK6B,WAAWnF,QAAQuJ,UAC9BvI,MAAOsC,EAAKE,OACZkb,KAAAA,CACF,GAGFpb,EAAKo/C,QAAUxrB,EACfyoB,EAAQ1kD,KAAKi8B,CAAAA,EAGf,IAAKj9B,EAAI,EAAGA,EAAIoR,EAAO,EAAEpR,EACvBi9B,EAASyoB,EAAQ1lD,CAAE,EACf,GAACi9B,GAAUA,EAAOzuB,OAAS,MAI/ByuB,EAAOzuB,KAAOi3C,GAAeC,EAAS1lD,EAAG+F,EAAQ4/C,SAAS,EAE9D,EAEA+C,WAAWpqD,EAAOyjD,EAAOh8C,EAAS,CAChC,IAAM9F,EAAO8F,EAAQ4iD,WAAa,aAC5BtgD,EAAW/J,EAAMmrB,6BAA4B,EAC7CpW,EAAO/U,EAAMgV,UACnB,QAAStT,EAAIqI,EAAStI,OAAS,EAAGC,GAAK,EAAG,EAAEA,EAAG,CAC7C,IAAMi9B,EAAS50B,EAASrI,CAAAA,EAAGyoD,QACtBxrB,IAILA,EAAOxY,KAAKkB,oBAAoBtS,EAAM4pB,EAAOxzB,IAAI,EAC7CxJ,GAAQg9B,EAAOzuB,MACjBg5C,GAAUlpD,EAAMiP,IAAK0vB,EAAQ5pB,CAAAA,EAEjC,CACF,EAEAu1C,mBAAmBtqD,EAAOyjD,EAAOh8C,EAAS,CACxC,GAAIA,EAAQ4iD,WAAa,qBACvB,OAGF,IAAMtgD,EAAW/J,EAAMmrB,6BAA4B,EACnD,QAASzpB,EAAIqI,EAAStI,OAAS,EAAGC,GAAK,EAAG,EAAEA,EAAG,CAC7C,IAAMi9B,EAAS50B,EAASrI,CAAAA,EAAGyoD,QAEvBjD,GAAiBvoB,CAAS,GAC5BuqB,GAAUlpD,EAAMiP,IAAK0vB,EAAQ3+B,EAAMgV,SAAS,CAEhD,CACF,EAEAu1C,kBAAkBvqD,EAAO+X,EAAMtQ,EAAS,CACtC,IAAMk3B,EAAS5mB,EAAKhN,KAAKo/C,QAErB,CAACjD,GAAiBvoB,CAAAA,GAAWl3B,EAAQ4iD,WAAa,qBAItDnB,GAAUlpD,EAAMiP,IAAK0vB,EAAQ3+B,EAAMgV,SAAS,CAC9C,EAEAlO,SAAU,CACRugD,UAAW,GACXgD,SAAU,mBACZ,CACF,ECzEMG,GAAa,CAACC,EAAW3iB,IAAa,CAC1C,GAAI,CAAC4iB,UAAAA,EAAY5iB,EAAU6iB,SAAAA,EAAW7iB,CAAAA,EAAY2iB,EAElD,OAAIA,EAAUG,gBACZF,EAAY9pD,KAAKC,IAAI6pD,EAAW5iB,CAAAA,EAChC6iB,EAAWF,EAAUI,iBAAmBjqD,KAAKC,IAAI8pD,EAAU7iB,CAAAA,GAGtD,CACL6iB,SAAAA,EACAD,UAAAA,EACAI,WAAYlqD,KAAKoC,IAAI8kC,EAAU4iB,CAAAA,CACjC,CACF,EAEMK,GAAa,CAAChyC,EAAGrP,IAAMqP,IAAM,MAAQrP,IAAM,MAAQqP,EAAEvO,eAAiBd,EAAEc,cAAgBuO,EAAE7O,QAAUR,EAAEQ,MAE/F8gD,GAAN,cAAqB1zB,EAAAA,CAK1B93B,YAAY8G,EAAQ,CAClB,MAAK,EAEL,KAAK2kD,OAAS,GAGd,KAAKC,eAAiB,CAAA,EAKtB,KAAKC,aAAe,KAGpB,KAAKC,aAAe,GAEpB,KAAKprD,MAAQsG,EAAOtG,MACpB,KAAKyH,QAAUnB,EAAOmB,QACtB,KAAKwH,IAAM3I,EAAO2I,IAClB,KAAKo8C,YAAcvrD,OACnB,KAAKwrD,YAAcxrD,OACnB,KAAKyrD,WAAazrD,OAClB,KAAK4kB,UAAY5kB,OACjB,KAAK2kB,SAAW3kB,OAChB,KAAKqJ,IAAMrJ,OACX,KAAKuJ,OAASvJ,OACd,KAAKwJ,KAAOxJ,OACZ,KAAKsJ,MAAQtJ,OACb,KAAKyd,OAASzd,OACd,KAAK0d,MAAQ1d,OACb,KAAK87B,SAAW97B,OAChB,KAAKmrB,SAAWnrB,OAChB,KAAKimB,OAASjmB,OACd,KAAK8uB,SAAW9uB,MAClB,CAEA6F,OAAO8e,EAAUC,EAAW+Y,EAAS,CACnC,KAAKhZ,SAAWA,EAChB,KAAKC,UAAYA,EACjB,KAAKkX,SAAW6B,EAEhB,KAAKI,cAAa,EAClB,KAAK2tB,YAAW,EAChB,KAAK1sB,IAAG,CACV,CAEAjB,eAAgB,CACV,KAAK1iB,aAAY,GACnB,KAAKqC,MAAQ,KAAKiH,SAClB,KAAKnb,KAAO,KAAKsyB,SAAStyB,KAC1B,KAAKF,MAAQ,KAAKoU,QAElB,KAAKD,OAAS,KAAKmH,UACnB,KAAKvb,IAAM,KAAKyyB,SAASzyB,IACzB,KAAKE,OAAS,KAAKkU,OAEvB,CAEAiuC,aAAc,CACZ,IAAMf,EAAY,KAAKhjD,QAAQ6L,QAAU,CAAA,EACrC+3C,EAAcpqD,GAAKwpD,EAAU/nC,eAAgB,CAAC,KAAK1iB,OAAQ,IAAI,GAAK,CAAA,EAEpEyqD,EAAUh9C,SACZ49C,EAAcA,EAAY59C,OAAQ7L,GAAS6oD,EAAUh9C,OAAO7L,EAAM,KAAK5B,MAAM8K,IAAI,CAAA,GAG/E2/C,EAAU3xC,OACZuyC,EAAcA,EAAYvyC,KAAK,CAACC,EAAGrP,IAAM+gD,EAAU3xC,KAAKC,EAAGrP,EAAG,KAAK1J,MAAM8K,IAAI,CAAA,GAG3E,KAAKrD,QAAQmB,SACfyiD,EAAYziD,QAAO,EAGrB,KAAKyiD,YAAcA,CACrB,CAEAvsB,KAAM,CACJ,GAAM,CAACr3B,QAAAA,EAASwH,IAAAA,CAAG,EAAI,KAMvB,GAAI,CAACxH,EAAQ+f,QAAS,CACpB,KAAKhK,MAAQ,KAAKD,OAAS,EAC3B,OAGF,IAAMktC,EAAYhjD,EAAQ6L,OACpBm4C,EAAYzwB,GAAOyvB,EAAU1vB,IAAI,EACjC+M,EAAW2jB,EAAUrjD,KACrBw4B,EAAc,KAAK8qB,oBAAmB,EACtC,CAACf,SAAAA,EAAUG,WAAAA,CAAAA,EAAcN,GAAWC,EAAW3iB,CAAAA,EAEjDtqB,EAAOD,EAEXtO,EAAI8rB,KAAO0wB,EAAUtpB,OAEjB,KAAKhnB,aAAY,GACnBqC,EAAQ,KAAKiH,SACblH,EAAS,KAAKouC,SAAS/qB,EAAakH,EAAU6iB,EAAUG,CAAc,EAAA,KAEtEvtC,EAAS,KAAKmH,UACdlH,EAAQ,KAAKouC,SAAShrB,EAAa6qB,EAAWd,EAAUG,CAAc,EAAA,IAGxE,KAAKttC,MAAQ5c,KAAKC,IAAI2c,EAAO/V,EAAQgd,UAAY,KAAKA,QAAQ,EAC9D,KAAKlH,OAAS3c,KAAKC,IAAI0c,EAAQ9V,EAAQid,WAAa,KAAKA,SAAS,CACpE,CAKAinC,SAAS/qB,EAAakH,EAAU6iB,EAAUG,EAAY,CACpD,GAAM,CAAC77C,IAAAA,EAAKwV,SAAAA,EAAUhd,QAAS,CAAC6L,OAAQ,CAAC6d,QAAAA,CAAAA,CAAQ,CAAC,EAAI,KAChD06B,EAAW,KAAKX,eAAiB,CAAA,EAEjCK,EAAa,KAAKA,WAAa,CAAC,CAAE,EAClCtwB,EAAa6vB,EAAa35B,EAC5B26B,EAAclrB,EAElB3xB,EAAI81B,UAAY,OAChB91B,EAAIi2B,aAAe,SAEnB,IAAI6mB,EAAM,GACN5iD,EAAM,CAAC8xB,EACX,YAAKowB,YAAY7qD,QAAQ,CAACgjB,EAAY9hB,IAAM,CAC1C,IAAMsqD,EAAYrB,EAAY7iB,EAAW,EAAK74B,EAAIg9C,YAAYzoC,EAAWV,IAAI,EAAEtF,OAE3E9b,IAAM,GAAK6pD,EAAWA,EAAW9pD,OAAS,CAAA,EAAKuqD,EAAY,EAAI76B,EAAU1M,KAC3EqnC,GAAe7wB,EACfswB,EAAWA,EAAW9pD,QAAUC,EAAI,EAAI,EAAI,EAAA,EAAM,EAClDyH,GAAO8xB,EACP8wB,KAGFF,EAASnqD,CAAAA,EAAK,CAAC4H,KAAM,EAAGH,IAAAA,EAAK4iD,IAAAA,EAAKvuC,MAAOwuC,EAAWzuC,OAAQutC,CAAU,EAEtES,EAAWA,EAAW9pD,OAAS,CAAA,GAAMuqD,EAAY76B,CACnD,CAAA,EAEO26B,CACT,CAEAF,SAAShrB,EAAa6qB,EAAWd,EAAUuB,EAAa,CACtD,GAAM,CAACj9C,IAAAA,EAAKyV,UAAAA,EAAWjd,QAAS,CAAC6L,OAAQ,CAAC6d,QAAAA,CAAAA,CAAQ,CAAC,EAAI,KACjD06B,EAAW,KAAKX,eAAiB,CAAA,EACjCI,EAAc,KAAKA,YAAc,CAAA,EACjCa,EAAcznC,EAAYkc,EAE5BwrB,EAAaj7B,EACbk7B,EAAkB,EAClBC,EAAmB,EAEnBhjD,EAAO,EACPijD,EAAM,EAEV,YAAKlB,YAAY7qD,QAAQ,CAACgjB,EAAY9hB,IAAM,CAC1C,GAAM,CAACsqD,UAAAA,EAAWlB,WAAAA,CAAU,EAAI0B,GAAkB7B,EAAUc,EAAWx8C,EAAKuU,EAAY0oC,CAAAA,EAGpFxqD,EAAI,GAAK4qD,EAAmBxB,EAAa,EAAI35B,EAAUg7B,IACzDC,GAAcC,EAAkBl7B,EAChCm6B,EAAY5oD,KAAK,CAAC8a,MAAO6uC,EAAiB9uC,OAAQ+uC,CAAgB,CAAA,EAClEhjD,GAAQ+iD,EAAkBl7B,EAC1Bo7B,IACAF,EAAkBC,EAAmB,GAIvCT,EAASnqD,CAAAA,EAAK,CAAC4H,KAAAA,EAAMH,IAAKmjD,EAAkBC,IAAAA,EAAK/uC,MAAOwuC,EAAWzuC,OAAQutC,CAAU,EAGrFuB,EAAkBzrD,KAAKoC,IAAIqpD,EAAiBL,CAAAA,EAC5CM,GAAoBxB,EAAa35B,CACnC,CAAA,EAEAi7B,GAAcC,EACdf,EAAY5oD,KAAK,CAAC8a,MAAO6uC,EAAiB9uC,OAAQ+uC,CAAgB,CAAA,EAE3DF,CACT,CAEAK,gBAAiB,CACf,GAAI,CAAC,KAAKhlD,QAAQ+f,QAChB,OAEF,IAAMoZ,EAAc,KAAK8qB,oBAAmB,EACtC,CAACR,eAAgBW,EAAUpkD,QAAS,CAACkyB,MAAAA,EAAOrmB,OAAQ,CAAC6d,QAAAA,CAAO,EAAGu7B,IAAAA,CAAAA,CAAI,EAAI,KACvEC,EAAYC,GAAcF,EAAK,KAAKpjD,KAAM,KAAKkU,KAAK,EAC1D,GAAI,KAAKrC,aAAY,EAAI,CACvB,IAAI4wC,EAAM,EACNziD,EAAOmyB,GAAe9B,EAAO,KAAKrwB,KAAO6nB,EAAS,KAAK/nB,MAAQ,KAAKmiD,WAAWQ,CAAI,CAAA,EACvF,QAAWc,KAAUhB,EACfE,IAAQc,EAAOd,MACjBA,EAAMc,EAAOd,IACbziD,EAAOmyB,GAAe9B,EAAO,KAAKrwB,KAAO6nB,EAAS,KAAK/nB,MAAQ,KAAKmiD,WAAWQ,CAAI,CAAA,GAErFc,EAAO1jD,KAAO,KAAKA,IAAMy3B,EAAczP,EACvC07B,EAAOvjD,KAAOqjD,EAAUG,WAAWH,EAAU1jD,EAAEK,CAAOujD,EAAAA,EAAOrvC,KAAK,EAClElU,GAAQujD,EAAOrvC,MAAQ2T,MAEpB,CACL,IAAIo7B,EAAM,EACNpjD,EAAMsyB,GAAe9B,EAAO,KAAKxwB,IAAMy3B,EAAczP,EAAS,KAAK9nB,OAAS,KAAKiiD,YAAYiB,CAAAA,EAAKhvC,MAAM,EAC5G,QAAWsvC,KAAUhB,EACfgB,EAAON,MAAQA,IACjBA,EAAMM,EAAON,IACbpjD,EAAMsyB,GAAe9B,EAAO,KAAKxwB,IAAMy3B,EAAczP,EAAS,KAAK9nB,OAAS,KAAKiiD,YAAYiB,CAAAA,EAAKhvC,MAAM,GAE1GsvC,EAAO1jD,IAAMA,EACb0jD,EAAOvjD,MAAQ,KAAKA,KAAO6nB,EAC3B07B,EAAOvjD,KAAOqjD,EAAUG,WAAWH,EAAU1jD,EAAE4jD,EAAOvjD,IAAI,EAAGujD,EAAOrvC,KAAK,EACzErU,GAAO0jD,EAAOtvC,OAAS4T,EAG7B,CAEAhW,cAAe,CACb,OAAO,KAAK1T,QAAQwjB,WAAa,OAAS,KAAKxjB,QAAQwjB,WAAa,QACtE,CAEAtpB,MAAO,CACL,GAAI,KAAK8F,QAAQ+f,QAAS,CACxB,IAAMvY,EAAM,KAAKA,IACjBo4B,GAASp4B,EAAK,IAAI,EAElB,KAAK89C,MAAK,EAEVvlB,GAAWv4B,CAAAA,EAEf,CAKA89C,OAAQ,CACN,GAAM,CAACtlD,QAASkB,EAAM2iD,YAAAA,EAAaC,WAAAA,EAAYt8C,IAAAA,CAAAA,EAAO,KAChD,CAAC0qB,MAAAA,EAAOrmB,OAAQm3C,CAAAA,EAAa9hD,EAC7BqkD,EAAelmD,GAASjD,MACxB8oD,EAAYC,GAAcjkD,EAAK+jD,IAAK,KAAKpjD,KAAM,KAAKkU,KAAK,EACzDiuC,EAAYzwB,GAAOyvB,EAAU1vB,IAAI,EACjC,CAAC5J,QAAAA,CAAO,EAAIs5B,EACZ3iB,EAAW2jB,EAAUrjD,KACrB6kD,EAAenlB,EAAW,EAC5BolB,EAEJ,KAAKzlB,UAAS,EAGdx4B,EAAI81B,UAAY4nB,EAAU5nB,UAAU,MAAA,EACpC91B,EAAIi2B,aAAe,SACnBj2B,EAAImU,UAAY,GAChBnU,EAAI8rB,KAAO0wB,EAAUtpB,OAErB,GAAM,CAACwoB,SAAAA,EAAUD,UAAAA,EAAWI,WAAAA,CAAU,EAAIN,GAAWC,EAAW3iB,CAAAA,EAG1DqlB,EAAgB,SAASlkD,EAAGC,EAAGsa,EAAY,CAC/C,GAAIxF,MAAM2sC,CAAaA,GAAAA,GAAY,GAAK3sC,MAAM0sC,CAAAA,GAAcA,EAAY,EACtE,OAIFz7C,EAAIm3B,KAAI,EAER,IAAMhjB,EAAYzS,GAAe6S,EAAWJ,UAAW,CAAA,EAUvD,GATAnU,EAAI8T,UAAYpS,GAAe6S,EAAWT,UAAWiqC,CAAAA,EACrD/9C,EAAIouC,QAAU1sC,GAAe6S,EAAW65B,QAAS,MAAA,EACjDpuC,EAAI23B,eAAiBj2B,GAAe6S,EAAWojB,eAAgB,CAAA,EAC/D33B,EAAIotC,SAAW1rC,GAAe6S,EAAW64B,SAAU,OAAA,EACnDptC,EAAImU,UAAYA,EAChBnU,EAAIgU,YAActS,GAAe6S,EAAWP,YAAa+pC,CAAAA,EAEzD/9C,EAAI03B,YAAYh2B,GAAe6S,EAAW4pC,SAAU,CAAA,CAAE,CAAA,EAElD3C,EAAUG,cAAe,CAG3B,IAAMyC,EAAc,CAClBvtC,OAAQ4qC,EAAY9pD,KAAK0sD,MAAQ,EACjC3qC,WAAYa,EAAWb,WACvBtC,SAAUmD,EAAWnD,SACrBgD,YAAaD,CACf,EACMiC,EAAUsnC,EAAUY,MAAMtkD,EAAG0hD,EAAW,CAAA,EACxCrlC,EAAUpc,EAAI+jD,EAGpBO,GAAgBv+C,EAAKo+C,EAAahoC,EAASC,EAASmlC,EAAUI,iBAAmBF,CAAAA,MAC5E,CAGL,IAAM8C,EAAUvkD,EAAItI,KAAKoC,KAAK8kC,EAAW4iB,GAAa,EAAG,CAAA,EACnDgD,EAAWf,EAAUG,WAAW7jD,EAAG0hD,CAAAA,EACnC/Q,EAAe0H,GAAc99B,EAAWo2B,YAAY,EAE1D3qC,EAAI43B,UAAS,EAETjgC,OAAOW,OAAOqyC,CAAAA,EAAc1N,KAAKjwB,IAAKA,KAAM,CAAI,EAClDwmC,GAAmBxzC,EAAK,CACtBhG,EAAGykD,EACHxkD,EAAGukD,EACHz9B,EACAE,EAAGw6B,EACH5qC,OAAQ85B,CACV,CAAA,EAEA3qC,EAAIkqC,KAAKuU,EAAUD,EAAS9C,EAAUD,CAAAA,EAGxCz7C,EAAIiB,KAAI,EACJkT,IAAc,GAChBnU,EAAI+3B,OAAM,EAId/3B,EAAIq3B,QAAO,CACb,EAEMqnB,EAAW,SAAS1kD,EAAGC,EAAGsa,EAAY,CAC1C+jB,GAAWt4B,EAAKuU,EAAWV,KAAM7Z,EAAGC,EAAK4hD,EAAa,EAAIW,EAAW,CACnEmC,cAAepqC,EAAW7U,OAC1Bo2B,UAAW4nB,EAAU5nB,UAAUvhB,EAAWuhB,SAAS,CACrD,CAAA,CACF,EAGM5pB,EAAe,KAAKA,aAAY,EAChCylB,EAAc,KAAK8qB,oBAAmB,EACxCvwC,EACF+xC,EAAS,CACPjkD,EAAGwyB,GAAe9B,EAAO,KAAKrwB,KAAO6nB,EAAS,KAAK/nB,MAAQmiD,EAAW,CAAE,CAAA,EACxEriD,EAAG,KAAKC,IAAMgoB,EAAUyP,EACxBza,KAAM,CACR,EAEA+mC,EAAS,CACPjkD,EAAG,KAAKK,KAAO6nB,EACfjoB,EAAGuyB,GAAe9B,EAAO,KAAKxwB,IAAMy3B,EAAczP,EAAS,KAAK9nB,OAASiiD,EAAY,CAAA,EAAG/tC,MAAM,EAC9F4I,KAAM,CACR,EAGF0nC,GAAsB,KAAK5+C,IAAKtG,EAAKmlD,aAAa,EAElD,IAAM7yB,EAAa6vB,EAAa35B,EAChC,KAAKk6B,YAAY7qD,QAAQ,CAACgjB,EAAY9hB,IAAM,CAC1CuN,EAAIgU,YAAcO,EAAWL,UAC7BlU,EAAI8T,UAAYS,EAAWL,UAE3B,IAAM4qC,EAAY9+C,EAAIg9C,YAAYzoC,EAAWV,IAAI,EAAEtF,MAC7CunB,EAAY4nB,EAAU5nB,UAAUvhB,EAAWuhB,YAAcvhB,EAAWuhB,UAAY0lB,EAAU1lB,UAAQ,EAClGvnB,EAAQmtC,EAAWsC,EAAec,EACpC9kD,EAAIikD,EAAOjkD,EACXC,EAAIgkD,EAAOhkD,EAEfyjD,EAAUqB,SAAS,KAAKxwC,KAAK,EAEzBrC,EACEzZ,EAAI,GAAKuH,EAAIuU,EAAQ2T,EAAU,KAAK/nB,QACtCF,EAAIgkD,EAAOhkD,GAAK+xB,EAChBiyB,EAAO/mC,OACPld,EAAIikD,EAAOjkD,EAAIwyB,GAAe9B,EAAO,KAAKrwB,KAAO6nB,EAAS,KAAK/nB,MAAQmiD,EAAW2B,EAAO/mC,IAAI,CAAC,GAEvFzkB,EAAI,GAAKwH,EAAI+xB,EAAa,KAAK5xB,SACxCJ,EAAIikD,EAAOjkD,EAAIA,EAAIqiD,EAAY4B,EAAO/mC,IAAI,EAAE3I,MAAQ2T,EACpD+7B,EAAO/mC,OACPjd,EAAIgkD,EAAOhkD,EAAIuyB,GAAe9B,EAAO,KAAKxwB,IAAMy3B,EAAczP,EAAS,KAAK9nB,OAASiiD,EAAY4B,EAAO/mC,IAAI,EAAE5I,MAAM,GAGtH,IAAM0wC,GAAQtB,EAAU1jD,EAAEA,CAAAA,EAS1B,GAPAkkD,EAAcc,GAAO/kD,EAAGsa,CAAAA,EAExBva,EAAIilD,GAAOnpB,EAAW97B,EAAI0hD,EAAWsC,EAAc9xC,EAAelS,EAAIuU,EAAQ,KAAKpU,MAAOT,EAAK+jD,GAAG,EAGlGiB,EAAShB,EAAU1jD,EAAEA,CAAAA,EAAIC,EAAGsa,CAAAA,EAExBrI,EACF+xC,EAAOjkD,GAAKuU,EAAQ2T,UACX,OAAO3N,EAAWV,MAAS,SAAU,CAC9C,IAAMqrC,GAAiB1C,EAAUxwB,WACjCiyB,EAAOhkD,GAAKklD,GAA0B5qC,EAAY2qC,EAAkBh9B,EAAAA,OAEpE+7B,EAAOhkD,GAAK+xB,CAEhB,CAAA,EAEAozB,GAAqB,KAAKp/C,IAAKtG,EAAKmlD,aAAa,CACnD,CAKArmB,WAAY,CACV,IAAM9+B,EAAO,KAAKlB,QACZi5B,EAAY/3B,EAAK43B,MACjB+tB,EAAYtzB,GAAO0F,EAAU3F,IAAI,EACjCwzB,EAAe78B,GAAUgP,EAAUvP,OAAO,EAEhD,GAAI,CAACuP,EAAUlZ,QACb,OAGF,IAAMmlC,EAAYC,GAAcjkD,EAAK+jD,IAAK,KAAKpjD,KAAM,KAAKkU,KAAK,EACzDvO,EAAM,KAAKA,IACXgc,EAAWyV,EAAUzV,SACrBgiC,EAAeqB,EAAUlmD,KAAO,EAChComD,EAA6BD,EAAaplD,IAAM8jD,EAClD/jD,EAIAI,EAAO,KAAKA,KACZmb,EAAW,KAAKjH,MAEpB,GAAI,KAAKrC,aAAY,EAEnBsJ,EAAW7jB,KAAKoC,IAAO,GAAA,KAAKuoD,UAAU,EACtCriD,EAAI,KAAKC,IAAMqlD,EACfllD,EAAOmyB,GAAe9yB,EAAKgxB,MAAOrwB,EAAM,KAAKF,MAAQqb,CAAAA,MAChD,CAEL,IAAMC,EAAY,KAAK4mC,YAAYzoD,OAAO,CAACC,EAAKsF,IAASxH,KAAKoC,IAAIF,EAAKsF,EAAKmV,MAAM,EAAG,CAAA,EACrFrU,EAAIslD,EAA6B/yB,GAAe9yB,EAAKgxB,MAAO,KAAKxwB,IAAK,KAAKE,OAASqb,EAAY/b,EAAK2K,OAAO6d,QAAU,KAAKu6B,oBAAmB,CAAA,EAKhJ,IAAMziD,EAAIwyB,GAAexQ,EAAU3hB,EAAMA,EAAOmb,CAAAA,EAGhDxV,EAAI81B,UAAY4nB,EAAU5nB,UAAU1J,GAAmBpQ,CAAAA,CAAAA,EACvDhc,EAAIi2B,aAAe,SACnBj2B,EAAIgU,YAAcyd,EAAU78B,MAC5BoL,EAAI8T,UAAY2d,EAAU78B,MAC1BoL,EAAI8rB,KAAOuzB,EAAUnsB,OAErBoF,GAAWt4B,EAAKyxB,EAAU5d,KAAM7Z,EAAGC,EAAGolD,CAAAA,CACxC,CAKA5C,qBAAsB,CACpB,IAAMhrB,EAAY,KAAKj5B,QAAQ84B,MACzB+tB,EAAYtzB,GAAO0F,EAAU3F,IAAI,EACjCwzB,EAAe78B,GAAUgP,EAAUvP,OAAO,EAChD,OAAOuP,EAAUlZ,QAAU8mC,EAAUrzB,WAAaszB,EAAahxC,OAAS,CAC1E,CAKAkxC,iBAAiBxlD,EAAGC,EAAG,CACrB,IAAIxH,EAAGgtD,EAAQC,EAEf,GAAI7R,GAAW7zC,EAAG,KAAKK,KAAM,KAAKF,KAAK,GAClC0zC,GAAW5zC,EAAG,KAAKC,IAAK,KAAKE,MAAM,GAGtC,IADAslD,EAAK,KAAKzD,eACLxpD,EAAI,EAAGA,EAAIitD,EAAGltD,OAAQ,EAAEC,EAG3B,GAFAgtD,EAASC,EAAGjtD,CAAE,EAEVo7C,GAAW7zC,EAAGylD,EAAOplD,KAAMolD,EAAOplD,KAAOolD,EAAOlxC,KAAK,GACpDs/B,GAAW5zC,EAAGwlD,EAAOvlD,IAAKulD,EAAOvlD,IAAMulD,EAAOnxC,MAAM,EAEvD,OAAO,KAAK8tC,YAAY3pD,CAAE,EAKhC,OAAO,IACT,CAMAktD,YAAYrrC,EAAG,CACb,IAAM5a,EAAO,KAAKlB,QAClB,GAAI,CAAConD,GAAWtrC,EAAEpjB,KAAMwI,CAAO,EAC7B,OAIF,IAAMmmD,EAAc,KAAKL,iBAAiBlrC,EAAEta,EAAGsa,EAAEra,CAAC,EAElD,GAAIqa,EAAEpjB,OAAS,aAAeojB,EAAEpjB,OAAS,WAAY,CACnD,IAAMo9C,EAAW,KAAK4N,aAChB4D,EAAWhE,GAAWxN,EAAUuR,CAAAA,EAClCvR,GAAY,CAACwR,GACf9tD,GAAK0H,EAAKqmD,QAAS,CAACzrC,EAAGg6B,EAAU,IAAK,EAAE,IAAI,EAG9C,KAAK4N,aAAe2D,EAEhBA,GAAe,CAACC,GAClB9tD,GAAK0H,EAAKgwC,QAAS,CAACp1B,EAAGurC,EAAa,IAAK,EAAE,IAAI,CAEnD,MAAWA,GACT7tD,GAAK0H,EAAK2a,QAAS,CAACC,EAAGurC,EAAa,IAAK,EAAE,IAAI,CAEnD,CACF,EAEA,SAAStC,GAAkB7B,EAAUc,EAAWx8C,EAAKuU,EAAY0oC,EAAa,CAC5E,IAAMF,EAAYiD,GAAmBzrC,EAAYmnC,EAAUc,EAAWx8C,CAAAA,EAChE67C,EAAaoE,GAAoBhD,EAAa1oC,EAAYioC,EAAUxwB,UAAU,EACpF,MAAO,CAAC+wB,UAAAA,EAAWlB,WAAAA,CAAU,CAC/B,CAEA,SAASmE,GAAmBzrC,EAAYmnC,EAAUc,EAAWx8C,EAAK,CAChE,IAAIkgD,EAAiB3rC,EAAWV,KAChC,OAAIqsC,GAAkB,OAAOA,GAAmB,WAC9CA,EAAiBA,EAAetsD,OAAO,CAACkW,EAAGrP,IAAMqP,EAAEtX,OAASiI,EAAEjI,OAASsX,EAAIrP,CAAC,GAEvEihD,EAAYc,EAAUrjD,KAAO,EAAK6G,EAAIg9C,YAAYkD,CAAAA,EAAgB3xC,KAC3E,CAEA,SAAS0xC,GAAoBhD,EAAa1oC,EAAY2qC,EAAgB,CACpE,IAAIrD,EAAaoB,EACjB,OAAI,OAAO1oC,EAAWV,MAAS,WAC7BgoC,EAAasD,GAA0B5qC,EAAY2qC,CAAAA,GAE9CrD,CACT,CAEA,SAASsD,GAA0B5qC,EAAY2qC,EAAgB,CAC7D,IAAMptB,EAAcvd,EAAWV,KAAOU,EAAWV,KAAKrhB,OAAS,EAC/D,OAAO0sD,EAAiBptB,CAC1B,CAEA,SAAS8tB,GAAW1uD,EAAMwI,EAAM,CAI9B,MAHKxI,IAAAA,IAAS,aAAeA,IAAS,cAAgBwI,EAAKgwC,SAAWhwC,EAAKqmD,UAGvErmD,EAAK2a,UAAYnjB,IAAS,SAAWA,IAAS,WAIpD,CAEA,IAAAivD,GAAe,CACbxjD,GAAI,SAMJyjD,SAAUrE,GAEVlqD,MAAMd,EAAOyjD,EAAOh8C,EAAS,CAC3B,IAAMgb,EAASziB,EAAMyiB,OAAS,IAAIuoC,GAAO,CAAC/7C,IAAKjP,EAAMiP,IAAKxH,QAAAA,EAASzH,MAAAA,CAAK,CAAA,EACxEkuB,GAAQznB,UAAUzG,EAAOyiB,EAAQhb,CAAAA,EACjCymB,GAAQkD,OAAOpxB,EAAOyiB,CAAAA,CACxB,EAEAvf,KAAKlD,EAAO,CACVkuB,GAAQqD,UAAUvxB,EAAOA,EAAMyiB,MAAM,EACrC,OAAOziB,EAAMyiB,MACf,EAKA+a,aAAax9B,EAAOyjD,EAAOh8C,EAAS,CAClC,IAAMgb,EAASziB,EAAMyiB,OACrByL,GAAQznB,UAAUzG,EAAOyiB,EAAQhb,CAAAA,EACjCgb,EAAOhb,QAAUA,CACnB,EAIAu3B,YAAYh/B,EAAO,CACjB,IAAMyiB,EAASziB,EAAMyiB,OACrBA,EAAO+oC,YAAW,EAClB/oC,EAAOgqC,eAAc,CACvB,EAGA6C,WAAWtvD,EAAO+X,EAAM,CACjBA,EAAKmgC,QACRl4C,EAAMyiB,OAAOmsC,YAAY72C,EAAKvV,KAAK,CAEvC,EAEAsE,SAAU,CACR0gB,QAAS,GACTyD,SAAU,MACV0O,MAAO,SACP/K,SAAU,GACVhmB,QAAS,GACTmd,OAAQ,IAGRzC,QAAQC,EAAGC,EAAYf,EAAQ,CAC7B,IAAMvY,EAAQsZ,EAAWhZ,aACnB+kD,EAAK9sC,EAAOziB,MACduvD,EAAGtrC,iBAAiB/Z,CAAQ,GAC9BqlD,EAAGxY,KAAK7sC,CAAAA,EACRsZ,EAAW7U,OAAS,KAEpB4gD,EAAGvY,KAAK9sC,CAAAA,EACRsZ,EAAW7U,OAAS,GAExB,EAEAgqC,QAAS,KACTqW,QAAS,KAET17C,OAAQ,CACNzP,MAAQoL,GAAQA,EAAIjP,MAAMyH,QAAQ5D,MAClC8mD,SAAU,GACVx5B,QAAS,GAYTzO,eAAe1iB,EAAO,CACpB,IAAMuR,EAAWvR,EAAM8K,KAAKyG,SACtB,CAAC+B,OAAQ,CAACs3C,cAAAA,EAAejoC,WAAAA,EAAYoiB,UAAAA,EAAWlhC,MAAAA,EAAO2rD,gBAAAA,EAAiB5V,aAAAA,CAAAA,CAAa,EAAI55C,EAAMyiB,OAAOhb,QAE5G,OAAOzH,EAAMgK,uBAAsB,EAAG4Y,IAAK7X,GAAS,CAClD,IAAM8X,EAAQ9X,EAAK6B,WAAWsI,SAAS01C,EAAgB,EAAI9qD,MAAS,EAC9DujB,EAAcqO,GAAU7O,EAAMQ,WAAW,EAE/C,MAAO,CACLP,KAAMvR,EAASxG,EAAKb,KAAK,EAAEwK,MAC3BqO,UAAWF,EAAMG,gBACjBG,UAAWtf,EACX8K,OAAQ,CAAC5D,EAAK+pC,QACduI,QAASx6B,EAAMy6B,eACf8P,SAAUvqC,EAAMwhB,WAChBuC,eAAgB/jB,EAAM0hB,iBACtB8X,SAAUx5B,EAAMg2B,gBAChBz1B,WAAYC,EAAY7F,MAAQ6F,EAAY9F,QAAU,EACtD0F,YAAaJ,EAAMK,YACnBP,WAAYA,GAAcE,EAAMF,WAChCtC,SAAUwC,EAAMxC,SAChB0kB,UAAWA,GAAaliB,EAAMkiB,UAC9B6U,aAAc4V,IAAoB5V,GAAgB/2B,EAAM+2B,cAGxDpvC,aAAcO,EAAKb,KACrB,CACF,EAAG,IAAI,CACT,CACF,EAEAq2B,MAAO,CACL18B,MAAQoL,GAAQA,EAAIjP,MAAMyH,QAAQ5D,MAClC2jB,QAAS,GACTyD,SAAU,SACVnI,KAAM,EACR,CACF,EAEAX,YAAa,CACXC,YAAc3D,GAAS,CAACA,EAAK6D,WAAW,IAAA,EACxChP,OAAQ,CACN8O,YAAc3D,GAAS,CAAC,CAAC,iBAAkB,SAAU,MAAO,EAAC2P,SAAS3P,CAAAA,CACxE,CACF,CACF,ECzsBagxC,GAAN,cAAoBn4B,EAAAA,CAIzB93B,YAAY8G,EAAQ,CAClB,MAAK,EAEL,KAAKtG,MAAQsG,EAAOtG,MACpB,KAAKyH,QAAUnB,EAAOmB,QACtB,KAAKwH,IAAM3I,EAAO2I,IAClB,KAAKygD,SAAW5vD,OAChB,KAAKqJ,IAAMrJ,OACX,KAAKuJ,OAASvJ,OACd,KAAKwJ,KAAOxJ,OACZ,KAAKsJ,MAAQtJ,OACb,KAAK0d,MAAQ1d,OACb,KAAKyd,OAASzd,OACd,KAAKmrB,SAAWnrB,OAChB,KAAKimB,OAASjmB,OACd,KAAK8uB,SAAW9uB,MAClB,CAEA6F,OAAO8e,EAAUC,EAAW,CAC1B,IAAM/b,EAAO,KAAKlB,QAKlB,GAHA,KAAK6B,KAAO,EACZ,KAAKH,IAAM,EAEP,CAACR,EAAK6e,QAAS,CACjB,KAAKhK,MAAQ,KAAKD,OAAS,KAAKnU,MAAQ,KAAKC,OAAS,EACtD,OAGF,KAAKmU,MAAQ,KAAKpU,MAAQqb,EAC1B,KAAKlH,OAAS,KAAKlU,OAASqb,EAE5B,IAAMsgB,EAAY59B,GAAQuB,EAAKma,IAAI,EAAIna,EAAKma,KAAKrhB,OAAS,EAC1D,KAAKiuD,SAAWh+B,GAAU/oB,EAAKwoB,OAAO,EACtC,IAAMw+B,EAAW3qB,EAAYhK,GAAOryB,EAAKoyB,IAAI,EAAEE,WAAa,KAAKy0B,SAASnyC,OAEtE,KAAKpC,aAAY,EACnB,KAAKoC,OAASoyC,EAEd,KAAKnyC,MAAQmyC,CAEjB,CAEAx0C,cAAe,CACb,IAAMqS,EAAM,KAAK/lB,QAAQwjB,SACzB,OAAOuC,IAAQ,OAASA,IAAQ,QAClC,CAEAoiC,UAAUnzC,EAAQ,CAChB,GAAM,CAACtT,IAAAA,EAAKG,KAAAA,EAAMD,OAAAA,EAAQD,MAAAA,EAAO3B,QAAAA,CAAAA,EAAW,KACtCkyB,EAAQlyB,EAAQkyB,MAClBtZ,EAAW,EACXoE,EAAU8W,EAAQC,EAEtB,OAAI,KAAKrgB,aAAY,GACnBogB,EAASE,GAAe9B,EAAOrwB,EAAMF,CAAAA,EACrCoyB,EAASryB,EAAMsT,EACfgI,EAAWrb,EAAQE,IAEf7B,EAAQwjB,WAAa,QACvBsQ,EAASjyB,EAAOmT,EAChB+e,EAASC,GAAe9B,EAAOtwB,EAAQF,CAAAA,EACvCkX,EAAWwB,GAAK,MAEhB0Z,EAASnyB,EAAQqT,EACjB+e,EAASC,GAAe9B,EAAOxwB,EAAKE,CAAAA,EACpCgX,EAAWwB,GAAK,IAElB4C,EAAWpb,EAASF,GAEf,CAACoyB,OAAAA,EAAQC,OAAAA,EAAQ/W,SAAAA,EAAUpE,SAAAA,CAAQ,CAC5C,CAEA1e,MAAO,CACL,IAAMsN,EAAM,KAAKA,IACXtG,EAAO,KAAKlB,QAElB,GAAI,CAACkB,EAAK6e,QACR,OAGF,IAAMqoC,EAAW70B,GAAOryB,EAAKoyB,IAAI,EAE3Bte,EADaozC,EAAS50B,WACA,EAAI,KAAKy0B,SAASvmD,IACxC,CAACoyB,OAAAA,EAAQC,OAAAA,EAAQ/W,SAAAA,EAAUpE,SAAAA,CAAAA,EAAY,KAAKuvC,UAAUnzC,CAAAA,EAE5D8qB,GAAWt4B,EAAKtG,EAAKma,KAAM,EAAG,EAAG+sC,EAAU,CACzChsD,MAAO8E,EAAK9E,MACZ4gB,SAAAA,EACApE,SAAAA,EACA0kB,UAAW1J,GAAmB1yB,EAAKgxB,KAAK,EACxCuL,aAAc,SACde,YAAa,CAAC1K,EAAQC,CAAO,CAC/B,CAAA,CACF,CACF,EAEA,SAASs0B,GAAY9vD,EAAO0gC,EAAW,CACrC,IAAMH,EAAQ,IAAIkvB,GAAM,CACtBxgD,IAAKjP,EAAMiP,IACXxH,QAASi5B,EACT1gC,MAAAA,CACF,CAAA,EAEAkuB,GAAQznB,UAAUzG,EAAOugC,EAAOG,CAAAA,EAChCxS,GAAQkD,OAAOpxB,EAAOugC,CAAAA,EACtBvgC,EAAM+vD,WAAaxvB,CACrB,CAEA,IAAAyvB,GAAe,CACbpkD,GAAI,QAMJyjD,SAAUI,GAEV3uD,MAAMd,EAAOyjD,EAAOh8C,EAAS,CAC3BqoD,GAAY9vD,EAAOyH,CAAAA,CACrB,EAEAvE,KAAKlD,EAAO,CACV,IAAM+vD,EAAa/vD,EAAM+vD,WACzB7hC,GAAQqD,UAAUvxB,EAAO+vD,CAAAA,EACzB,OAAO/vD,EAAM+vD,UACf,EAEAvyB,aAAax9B,EAAOyjD,EAAOh8C,EAAS,CAClC,IAAM84B,EAAQvgC,EAAM+vD,WACpB7hC,GAAQznB,UAAUzG,EAAOugC,EAAO94B,CAAAA,EAChC84B,EAAM94B,QAAUA,CAClB,EAEAX,SAAU,CACR6yB,MAAO,SACPnS,QAAS,GACTuT,KAAM,CACJhV,OAAQ,MACV,EACA6I,SAAU,GACVuC,QAAS,GACTlG,SAAU,MACVnI,KAAM,GACNiD,OAAQ,GACV,EAEAwR,cAAe,CACb1zB,MAAO,OACT,EAEAse,YAAa,CACXC,YAAa,GACbC,WAAY,EACd,CACF,EClKMO,GAAM,IAAIqtC,QAEhBC,GAAe,CACbtkD,GAAI,WAEJ9K,MAAMd,EAAOyjD,EAAOh8C,EAAS,CAC3B,IAAM84B,EAAQ,IAAIkvB,GAAM,CACtBxgD,IAAKjP,EAAMiP,IACXxH,QAAAA,EACAzH,MAAAA,CACF,CAAA,EAEAkuB,GAAQznB,UAAUzG,EAAOugC,EAAO94B,CAAAA,EAChCymB,GAAQkD,OAAOpxB,EAAOugC,CAAAA,EACtB3d,GAAItgB,IAAItC,EAAOugC,CAAAA,CACjB,EAEAr9B,KAAKlD,EAAO,CACVkuB,GAAQqD,UAAUvxB,EAAO4iB,GAAIzgB,IAAInC,CAAAA,CAAAA,EACjC4iB,GAAIvf,OAAOrD,CAAAA,CACb,EAEAw9B,aAAax9B,EAAOyjD,EAAOh8C,EAAS,CAClC,IAAM84B,EAAQ3d,GAAIzgB,IAAInC,CAAAA,EACtBkuB,GAAQznB,UAAUzG,EAAOugC,EAAO94B,CAAAA,EAChC84B,EAAM94B,QAAUA,CAClB,EAEAX,SAAU,CACR6yB,MAAO,SACPnS,QAAS,GACTuT,KAAM,CACJhV,OAAQ,QACV,EACA6I,SAAU,GACVuC,QAAS,EACTlG,SAAU,MACVnI,KAAM,GACNiD,OAAQ,IACV,EAEAwR,cAAe,CACb1zB,MAAO,OACT,EAEAse,YAAa,CACXC,YAAa,GACbC,WAAY,EACd,CACF,ECpCM8tC,GAAc,CAIlBC,QAAQ5uD,EAAO,CACb,GAAI,CAACA,EAAMC,OACT,MAAO,GAGT,IAAIC,EAAG+3B,EACH42B,EAAO,IAAI7hB,IACXtlC,EAAI,EACJ4J,EAAQ,EAEZ,IAAKpR,EAAI,EAAG+3B,EAAMj4B,EAAMC,OAAQC,EAAI+3B,EAAK,EAAE/3B,EAAG,CAC5C,IAAM6oB,EAAK/oB,EAAME,CAAAA,EAAGsM,QACpB,GAAIuc,GAAMA,EAAGkN,SAAQ,EAAI,CACvB,IAAMjK,EAAMjD,EAAGiN,gBAAe,EAC9B64B,EAAK1tD,IAAI6qB,EAAIvkB,CAAC,EACdC,GAAKskB,EAAItkB,EACT,EAAE4J,EAEN,CAGA,OAAIA,IAAU,GAAKu9C,EAAKjoD,OAAS,EACxB,GAKF,CACLa,EAHe,CAAIonD,GAAAA,GAAMxtD,OAAO,CAACkW,EAAGrP,IAAMqP,EAAIrP,CAAAA,EAAK2mD,EAAKjoD,KAIxDc,EAAGA,EAAI4J,CACT,CACF,EAKAsa,QAAQ5rB,EAAO8uD,EAAe,CAC5B,GAAI,CAAC9uD,EAAMC,OACT,MAAO,GAGT,IAAIwH,EAAIqnD,EAAcrnD,EAClBC,EAAIonD,EAAcpnD,EAClBwjB,EAAc1gB,OAAOE,kBACrBxK,EAAG+3B,EAAK82B,EAEZ,IAAK7uD,EAAI,EAAG+3B,EAAMj4B,EAAMC,OAAQC,EAAI+3B,EAAK,EAAE/3B,EAAG,CAC5C,IAAM6oB,EAAK/oB,EAAME,CAAAA,EAAGsM,QACpB,GAAIuc,GAAMA,EAAGkN,SAAQ,EAAI,CACvB,IAAMna,EAASiN,EAAGoC,eAAc,EAC1B4gB,EAAIijB,GAAsBF,EAAehzC,CAAAA,EAE3CiwB,EAAI7gB,IACNA,EAAc6gB,EACdgjB,EAAiBhmC,GAGvB,CAEA,GAAIgmC,EAAgB,CAClB,IAAME,EAAKF,EAAe/4B,gBAAe,EACzCvuB,EAAIwnD,EAAGxnD,EACPC,EAAIunD,EAAGvnD,EAGT,MAAO,CACLD,EAAAA,EACAC,EAAAA,CACF,CACF,CACF,EAGA,SAASwnD,GAAap1C,EAAMq1C,EAAQ,CAClC,OAAIA,IACEvpD,GAAQupD,CAAS,EAEnBrlD,MAAMie,UAAU7mB,KAAKkuD,MAAMt1C,EAAMq1C,CAAAA,EAEjCr1C,EAAK5Y,KAAKiuD,CAAAA,GAIPr1C,CACT,CAQA,SAASu1C,GAAcC,EAAK,CAC1B,OAAK,OAAOA,GAAQ,UAAYA,aAAeC,SAAWD,EAAI7yC,QAAQ;CAAA,EAAQ,GACrE6yC,EAAI5nB,MAAM;CAAA,EAEZ4nB,CACT,CASA,SAASE,GAAkBhxD,EAAO4B,EAAM,CACtC,GAAM,CAACoM,QAAAA,EAASxD,aAAAA,EAAcN,MAAAA,CAAAA,EAAStI,EACjCgL,EAAa5M,EAAMwR,eAAehH,CAAAA,EAAcoC,WAChD,CAAC8H,MAAAA,EAAOvM,MAAAA,CAAAA,EAASyE,EAAW6H,iBAAiBvK,CAAAA,EAEnD,MAAO,CACLlK,MAAAA,EACA0U,MAAAA,EACA7H,OAAQD,EAAWgH,UAAU1J,CAAAA,EAC7BgE,IAAKlO,EAAM8K,KAAKyG,SAAS/G,CAAa,EAACM,KAAKZ,CAAM,EAClD+mD,eAAgB9oD,EAChB2F,QAASlB,EAAW2D,WAAU,EAC9BtC,UAAW/D,EACXM,aAAAA,EACAwD,QAAAA,CACF,CACF,CAKA,SAASkjD,GAAeC,EAAS1pD,EAAS,CACxC,IAAMwH,EAAMkiD,EAAQnxD,MAAMiP,IACpB,CAACmiD,KAAAA,EAAMC,OAAAA,EAAQ9wB,MAAAA,CAAAA,EAAS4wB,EACxB,CAACxG,SAAAA,EAAUD,UAAAA,CAAAA,EAAajjD,EACxB6pD,EAAWt2B,GAAOvzB,EAAQ6pD,QAAQ,EAClChD,EAAYtzB,GAAOvzB,EAAQ6mD,SAAS,EACpCiD,EAAav2B,GAAOvzB,EAAQ8pD,UAAU,EACtCC,EAAiBjxB,EAAM9+B,OACvBgwD,EAAkBJ,EAAO5vD,OACzBiwD,EAAoBN,EAAK3vD,OAEzB0vB,EAAUO,GAAUjqB,EAAQ0pB,OAAO,EACrC5T,EAAS4T,EAAQ5T,OACjBC,EAAQ,EAGRm0C,EAAqBP,EAAKvuD,OAAO,CAACiQ,EAAO8+C,IAAa9+C,EAAQ8+C,EAASC,OAAOpwD,OAASmwD,EAASE,MAAMrwD,OAASmwD,EAASG,MAAMtwD,OAAQ,CAAA,EAQ1I,GAPAkwD,GAAsBR,EAAQa,WAAWvwD,OAAS0vD,EAAQc,UAAUxwD,OAEhE+vD,IACFj0C,GAAUi0C,EAAiBlD,EAAUrzB,YACnCu2B,EAAiB,GAAK/pD,EAAQyqD,aAC/BzqD,EAAQ0qD,mBAEPR,EAAoB,CAEtB,IAAMS,EAAiB3qD,EAAQ4qD,cAAgBzxD,KAAKoC,IAAI0nD,EAAW4G,EAASr2B,UAAU,EAAIq2B,EAASr2B,WACnG1d,GAAUm0C,EAAoBU,GAC5BT,EAAqBD,GAAqBJ,EAASr2B,YACnD02B,EAAqB,GAAKlqD,EAAQ6qD,YAElCb,IACFl0C,GAAU9V,EAAQ8qD,gBACjBd,EAAkBF,EAAWt2B,YAC5Bw2B,EAAkB,GAAKhqD,EAAQ+qD,eAInC,IAAIC,EAAe,EACbC,EAAe,SAASvsC,EAAM,CAClC3I,EAAQ5c,KAAKoC,IAAIwa,EAAOvO,EAAIg9C,YAAY9lC,CAAM3I,EAAAA,MAAQi1C,CAAAA,CACxD,EAEAxjD,OAAAA,EAAIm3B,KAAI,EAERn3B,EAAI8rB,KAAOuzB,EAAUnsB,OACrBtQ,GAAKs/B,EAAQ5wB,MAAOmyB,CAAAA,EAGpBzjD,EAAI8rB,KAAOu2B,EAASnvB,OACpBtQ,GAAKs/B,EAAQa,WAAWp5C,OAAOu4C,EAAQc,SAAS,EAAGS,CAAAA,EAGnDD,EAAehrD,EAAQ4qD,cAAiB1H,EAAW,EAAIljD,EAAQ+nB,WAAc,EAC7EqC,GAAKu/B,EAAOQ,GAAa,CACvB//B,GAAK+/B,EAASC,OAAQa,CAAAA,EACtB7gC,GAAK+/B,EAASE,MAAOY,CAAAA,EACrB7gC,GAAK+/B,EAASG,MAAOW,CAAAA,CACvB,CAAA,EAGAD,EAAe,EAGfxjD,EAAI8rB,KAAOw2B,EAAWpvB,OACtBtQ,GAAKs/B,EAAQE,OAAQqB,CAAAA,EAErBzjD,EAAIq3B,QAAO,EAGX9oB,GAAS2T,EAAQ3T,MAEV,CAACA,MAAAA,EAAOD,OAAAA,CAAM,CACvB,CAEA,SAASo1C,GAAgB3yD,EAAOoI,EAAM,CACpC,GAAM,CAACc,EAAAA,EAAGqU,OAAAA,CAAAA,EAAUnV,EAEpB,OAAIc,EAAIqU,EAAS,EACR,MACErU,EAAKlJ,EAAMud,OAASA,EAAS,EAC/B,SAEF,QACT,CAEA,SAASq1C,GAAoBC,EAAQ7yD,EAAOyH,EAASW,EAAM,CACzD,GAAM,CAACa,EAAAA,EAAGuU,MAAAA,CAAAA,EAASpV,EACb0qD,EAAQrrD,EAAQsrD,UAAYtrD,EAAQurD,aAK1C,GAJIH,IAAW,QAAU5pD,EAAIuU,EAAQs1C,EAAQ9yD,EAAMwd,OAI/Cq1C,IAAW,SAAW5pD,EAAIuU,EAAQs1C,EAAQ,EAC5C,MAAO,EAEX,CAEA,SAASG,GAAgBjzD,EAAOyH,EAASW,EAAM8qD,EAAQ,CACrD,GAAM,CAACjqD,EAAAA,EAAGuU,MAAAA,CAAAA,EAASpV,EACb,CAACoV,MAAO21C,EAAYn+C,UAAW,CAAC1L,KAAAA,EAAMF,MAAAA,CAAK,CAAC,EAAIpJ,EAClD6yD,EAAS,SAEb,OAAIK,IAAW,SACbL,EAAS5pD,IAAMK,EAAOF,GAAS,EAAI,OAAS,QACnCH,GAAKuU,EAAQ,EACtBq1C,EAAS,OACA5pD,GAAKkqD,EAAa31C,EAAQ,IACnCq1C,EAAS,SAGPD,GAAoBC,EAAQ7yD,EAAOyH,EAASW,CAAO,IACrDyqD,EAAS,UAGJA,CACT,CAKA,SAASO,GAAmBpzD,EAAOyH,EAASW,EAAM,CAChD,IAAM8qD,EAAS9qD,EAAK8qD,QAAUzrD,EAAQyrD,QAAUP,GAAgB3yD,EAAOoI,CAAAA,EAEvE,MAAO,CACLyqD,OAAQzqD,EAAKyqD,QAAUprD,EAAQorD,QAAUI,GAAgBjzD,EAAOyH,EAASW,EAAM8qD,CAAAA,EAC/EA,OAAAA,CACF,CACF,CAEA,SAASG,GAAOjrD,EAAMyqD,EAAQ,CAC5B,GAAI,CAAC5pD,EAAAA,EAAGuU,MAAAA,CAAAA,EAASpV,EACjB,OAAIyqD,IAAW,QACb5pD,GAAKuU,EACIq1C,IAAW,WACpB5pD,GAAMuU,EAAQ,GAETvU,CACT,CAEA,SAASqqD,GAAOlrD,EAAM8qD,EAAQK,EAAgB,CAE5C,GAAI,CAACrqD,EAAAA,EAAGqU,OAAAA,CAAAA,EAAUnV,EAClB,OAAI8qD,IAAW,MACbhqD,GAAKqqD,EACIL,IAAW,SACpBhqD,GAAKqU,EAASg2C,EAEdrqD,GAAMqU,EAAS,EAEVrU,CACT,CAKA,SAASsqD,GAAmB/rD,EAASW,EAAMqrD,EAAWzzD,EAAO,CAC3D,GAAM,CAAC+yD,UAAAA,EAAWC,aAAAA,EAAcU,aAAAA,CAAAA,EAAgBjsD,EAC1C,CAACorD,OAAAA,EAAQK,OAAAA,CAAAA,EAAUO,EACnBF,EAAiBR,EAAYC,EAC7B,CAACvR,QAAAA,EAASC,SAAAA,EAAUC,WAAAA,EAAYC,YAAAA,CAAAA,EAAeN,GAAcoS,CAAAA,EAE/DzqD,EAAIoqD,GAAOjrD,EAAMyqD,CAAAA,EACf3pD,EAAIoqD,GAAOlrD,EAAM8qD,EAAQK,CAAAA,EAE/B,OAAIL,IAAW,SACTL,IAAW,OACb5pD,GAAKsqD,EACIV,IAAW,UACpB5pD,GAAKsqD,GAEEV,IAAW,OACpB5pD,GAAKrI,KAAKoC,IAAIy+C,EAASE,CAAcoR,EAAAA,EAC5BF,IAAW,UACpB5pD,GAAKrI,KAAKoC,IAAI0+C,EAAUE,CAAemR,EAAAA,GAGlC,CACL9pD,EAAGq3B,GAAYr3B,EAAG,EAAGjJ,EAAMwd,MAAQpV,EAAKoV,KAAK,EAC7CtU,EAAGo3B,GAAYp3B,EAAG,EAAGlJ,EAAMud,OAASnV,EAAKmV,MAAM,CACjD,CACF,CAEA,SAASo2C,GAAYxC,EAASx3B,EAAOlyB,EAAS,CAC5C,IAAM0pB,EAAUO,GAAUjqB,EAAQ0pB,OAAO,EAEzC,OAAOwI,IAAU,SACbw3B,EAAQloD,EAAIkoD,EAAQ3zC,MAAQ,EAC5Bmc,IAAU,QACRw3B,EAAQloD,EAAIkoD,EAAQ3zC,MAAQ2T,EAAQ/nB,MACpC+nD,EAAQloD,EAAIkoB,EAAQ7nB,IAC5B,CAKA,SAASsqD,GAAwBp0B,EAAU,CACzC,OAAOkxB,GAAa,CAAA,EAAIG,GAAcrxB,CAAAA,CAAAA,CACxC,CAEA,SAASq0B,GAAqBjmD,EAAQujD,EAAS2C,EAAc,CAC3D,OAAOjmD,GAAcD,EAAQ,CAC3BujD,QAAAA,EACA2C,aAAAA,EACA3zD,KAAM,SACR,CAAA,CACF,CAEA,SAAS4zD,GAAkB3zD,EAAWiV,EAAS,CAC7C,IAAMgU,EAAWhU,GAAWA,EAAQvH,SAAWuH,EAAQvH,QAAQqjD,SAAW97C,EAAQvH,QAAQqjD,QAAQ/wD,UAClG,OAAOipB,EAAWjpB,EAAUipB,SAASA,CAAAA,EAAYjpB,CACnD,CAEA,IAAM4zD,GAAmB,CAEvBC,YAAaC,GACb3zB,MAAMuzB,EAAc,CAClB,GAAIA,EAAaryD,OAAS,EAAG,CAC3B,IAAMG,EAAOkyD,EAAa,CAAE,EACtBxgD,EAAS1R,EAAK5B,MAAM8K,KAAKwI,OACzB6gD,EAAa7gD,EAASA,EAAO7R,OAAS,EAE5C,GAAI,MAAQ,KAAKgG,SAAW,KAAKA,QAAQ8C,OAAS,UAChD,OAAO3I,EAAKkM,QAAQ4G,OAAS,GACxB,GAAI9S,EAAK8S,MACd,OAAO9S,EAAK8S,MACP,GAAIy/C,EAAa,GAAKvyD,EAAKqM,UAAYkmD,EAC5C,OAAO7gD,EAAO1R,EAAKqM,SAAS,EAIhC,MAAO,EACT,EACAmmD,WAAYF,GAGZlC,WAAYkC,GAGZG,YAAaH,GACbx/C,MAAM4/C,EAAa,CACjB,GAAI,MAAQ,KAAK7sD,SAAW,KAAKA,QAAQ8C,OAAS,UAChD,OAAO+pD,EAAY5/C,MAAQ,KAAO4/C,EAAYrD,gBAAkBqD,EAAYrD,eAG9E,IAAIv8C,EAAQ4/C,EAAYxmD,QAAQ4G,OAAS,GAErCA,IACFA,GAAS,MAEX,IAAMvM,EAAQmsD,EAAYrD,eAC1B,OAAKn3C,GAAc3R,CAAQ,IACzBuM,GAASvM,GAEJuM,CACT,EACA6/C,WAAWD,EAAa,CAEtB,IAAM7sD,EADO6sD,EAAYt0D,MAAMwR,eAAe8iD,EAAY9pD,YAAY,EACjDoC,WAAWsI,SAASo/C,EAAYrmD,SAAS,EAC9D,MAAO,CACLiV,YAAazb,EAAQyb,YACrBF,gBAAiBvb,EAAQub,gBACzBK,YAAa5b,EAAQ4b,YACrBghB,WAAY58B,EAAQ48B,WACpBE,iBAAkB98B,EAAQ88B,iBAC1BqV,aAAc,CAChB,CACF,EACA4a,gBAAiB,CACf,OAAO,KAAK/sD,QAAQgtD,SACtB,EACAC,gBAAgBJ,EAAa,CAE3B,IAAM7sD,EADO6sD,EAAYt0D,MAAMwR,eAAe8iD,EAAY9pD,YAAY,EACjDoC,WAAWsI,SAASo/C,EAAYrmD,SAAS,EAC9D,MAAO,CACL0U,WAAYlb,EAAQkb,WACpBtC,SAAU5Y,EAAQ4Y,QACpB,CACF,EACAs0C,WAAYT,GAGZjC,UAAWiC,GAGXU,aAAcV,GACd7C,OAAQ6C,GACRW,YAAaX,EACf,EAWA,SAASY,GAA2B10D,EAAWqe,EAAMxP,EAAKy7B,EAAK,CAC7D,IAAM/f,EAASvqB,EAAUqe,CAAAA,EAAMxd,KAAKgO,EAAKy7B,CAAAA,EAEzC,OAAI,OAAO/f,EAAW,IACbqpC,GAAiBv1C,CAAAA,EAAMxd,KAAKgO,EAAKy7B,CAAAA,EAGnC/f,CACT,CAEO,IAAMoqC,GAAN,cAAsBz9B,EAAAA,CAK3B,OAAO64B,YAAcA,GAErB3wD,YAAY8G,EAAQ,CAClB,MAAK,EAEL,KAAK0uD,QAAU,EACf,KAAKnzD,QAAU,CAAA,EACf,KAAKozD,eAAiBn1D,OACtB,KAAKo1D,MAAQp1D,OACb,KAAKq1D,kBAAoBr1D,OACzB,KAAKs1D,cAAgB,CAAA,EACrB,KAAKrtD,YAAcjI,OACnB,KAAK+P,SAAW/P,OAChB,KAAKE,MAAQsG,EAAOtG,MACpB,KAAKyH,QAAUnB,EAAOmB,QACtB,KAAK4tD,WAAav1D,OAClB,KAAKygC,MAAQzgC,OACb,KAAKkyD,WAAalyD,OAClB,KAAKsxD,KAAOtxD,OACZ,KAAKmyD,UAAYnyD,OACjB,KAAKuxD,OAASvxD,OACd,KAAK+yD,OAAS/yD,OACd,KAAKozD,OAASpzD,OACd,KAAKmJ,EAAInJ,OACT,KAAKoJ,EAAIpJ,OACT,KAAKyd,OAASzd,OACd,KAAK0d,MAAQ1d,OACb,KAAKw1D,OAASx1D,OACd,KAAKy1D,OAASz1D,OAGd,KAAK01D,YAAc11D,OACnB,KAAK21D,iBAAmB31D,OACxB,KAAK41D,gBAAkB51D,MACzB,CAEAiQ,WAAWtI,EAAS,CAClB,KAAKA,QAAUA,EACf,KAAK0tD,kBAAoBr1D,OACzB,KAAK+P,SAAW/P,MAClB,CAKAmW,oBAAqB,CACnB,IAAM1H,EAAS,KAAK4mD,kBAEpB,GAAI5mD,EACF,OAAOA,EAGT,IAAMvO,EAAQ,KAAKA,MACbyH,EAAU,KAAKA,QAAQq1B,WAAW,KAAKnqB,WAAU,CAAA,EACjDhK,EAAOlB,EAAQ2wB,SAAWp4B,EAAMyH,QAAQV,WAAaU,EAAQE,WAC7DA,EAAa,IAAItB,GAAW,KAAKrG,MAAO2I,CAAAA,EAC9C,OAAIA,EAAKyN,aACP,KAAK++C,kBAAoBvuD,OAAOoP,OAAOrO,CAAAA,GAGlCA,CACT,CAKAgL,YAAa,CACX,OAAO,KAAK9C,WACZ,KAAKA,SAAWgkD,GAAqB,KAAK7zD,MAAM2S,WAAU,EAAI,KAAM,KAAKyiD,aAAa,EACxF,CAEAO,SAAStgD,EAAS5N,EAAS,CACzB,GAAM,CAACrH,UAAAA,CAAS,EAAIqH,EAEdwsD,EAAca,GAA2B10D,EAAW,cAAe,KAAMiV,CAAAA,EACzEkrB,EAAQu0B,GAA2B10D,EAAW,QAAS,KAAMiV,CAAAA,EAC7D++C,EAAaU,GAA2B10D,EAAW,aAAc,KAAMiV,CAAAA,EAEzEy8C,EAAQ,CAAA,EACZA,OAAAA,EAAQpB,GAAaoB,EAAOjB,GAAcoD,CAAAA,CAAAA,EAC1CnC,EAAQpB,GAAaoB,EAAOjB,GAActwB,CAAAA,CAAAA,EAC1CuxB,EAAQpB,GAAaoB,EAAOjB,GAAcuD,CAAAA,CAAAA,EAEnCtC,CACT,CAEA8D,cAAc9B,EAAcrsD,EAAS,CACnC,OAAOmsD,GACLkB,GAA2BrtD,EAAQrH,UAAW,aAAc,KAAM0zD,CAAAA,CAAAA,CAEtE,CAEA+B,QAAQ/B,EAAcrsD,EAAS,CAC7B,GAAM,CAACrH,UAAAA,CAAS,EAAIqH,EACdquD,EAAY,CAAA,EAElBjkC,OAAAA,GAAKiiC,EAAez+C,GAAY,CAC9B,IAAMu8C,EAAW,CACfC,OAAQ,CAAA,EACRC,MAAO,CAAA,EACPC,MAAO,CAAA,CACT,EACMgE,EAAShC,GAAkB3zD,EAAWiV,CAAAA,EAC5Cq7C,GAAakB,EAASC,OAAQhB,GAAciE,GAA2BiB,EAAQ,cAAe,KAAM1gD,CAAAA,CAAAA,CAAAA,EACpGq7C,GAAakB,EAASE,MAAOgD,GAA2BiB,EAAQ,QAAS,KAAM1gD,CAAAA,CAAAA,EAC/Eq7C,GAAakB,EAASG,MAAOlB,GAAciE,GAA2BiB,EAAQ,aAAc,KAAM1gD,CAAAA,CAAAA,CAAAA,EAElGygD,EAAUpzD,KAAKkvD,CAAAA,CACjB,CAAA,EAEOkE,CACT,CAEAE,aAAalC,EAAcrsD,EAAS,CAClC,OAAOmsD,GACLkB,GAA2BrtD,EAAQrH,UAAW,YAAa,KAAM0zD,CAAAA,CAAAA,CAErE,CAGAmC,UAAUnC,EAAcrsD,EAAS,CAC/B,GAAM,CAACrH,UAAAA,CAAS,EAAIqH,EAEdmtD,EAAeE,GAA2B10D,EAAW,eAAgB,KAAM0zD,CAAAA,EAC3EzC,EAASyD,GAA2B10D,EAAW,SAAU,KAAM0zD,CAAAA,EAC/De,EAAcC,GAA2B10D,EAAW,cAAe,KAAM0zD,CAAAA,EAE3EhC,EAAQ,CAAA,EACZA,OAAAA,EAAQpB,GAAaoB,EAAOjB,GAAc+D,CAAAA,CAAAA,EAC1C9C,EAAQpB,GAAaoB,EAAOjB,GAAcQ,CAAAA,CAAAA,EAC1CS,EAAQpB,GAAaoB,EAAOjB,GAAcgE,CAAAA,CAAAA,EAEnC/C,CACT,CAKAoE,aAAazuD,EAAS,CACpB,IAAM/B,EAAS,KAAK7D,QACdiJ,EAAO,KAAK9K,MAAM8K,KAClB0qD,EAAc,CAAA,EACdC,EAAmB,CAAA,EACnBC,EAAkB,CAAA,EACpB5B,EAAe,CAAA,EACfpyD,EAAG+3B,EAEP,IAAK/3B,EAAI,EAAG+3B,EAAM/zB,EAAOjE,OAAQC,EAAI+3B,EAAK,EAAE/3B,EAC1CoyD,EAAapxD,KAAKsuD,GAAkB,KAAKhxD,MAAO0F,EAAOhE,CAAE,CAAA,CAAA,EAI3D,OAAI+F,EAAQgG,SACVqmD,EAAeA,EAAarmD,OAAO,CAACO,EAAS9D,EAAOqjB,IAAU9lB,EAAQgG,OAAOO,EAAS9D,EAAOqjB,EAAOziB,CAAAA,CAAAA,GAIlGrD,EAAQ0uD,WACVrC,EAAeA,EAAah7C,KAAK,CAACC,EAAGrP,IAAMjC,EAAQ0uD,SAASp9C,EAAGrP,EAAGoB,CAAAA,CAAAA,GAIpE+mB,GAAKiiC,EAAez+C,GAAY,CAC9B,IAAM0gD,EAAShC,GAAkBtsD,EAAQrH,UAAWiV,CAAAA,EACpDmgD,EAAY9yD,KAAKoyD,GAA2BiB,EAAQ,aAAc,KAAM1gD,CAAAA,CAAAA,EACxEogD,EAAiB/yD,KAAKoyD,GAA2BiB,EAAQ,kBAAmB,KAAM1gD,CAAAA,CAAAA,EAClFqgD,EAAgBhzD,KAAKoyD,GAA2BiB,EAAQ,iBAAkB,KAAM1gD,CAAAA,CAAAA,CAClF,CAAA,EAEA,KAAKmgD,YAAcA,EACnB,KAAKC,iBAAmBA,EACxB,KAAKC,gBAAkBA,EACvB,KAAKL,WAAavB,EACXA,CACT,CAEAnuD,OAAOorB,EAASmnB,EAAQ,CACtB,IAAMzwC,EAAU,KAAKA,QAAQq1B,WAAW,KAAKnqB,WAAU,CAAA,EACjDjN,EAAS,KAAK7D,QAChBwF,EACAysD,EAAe,CAAA,EAEnB,GAAI,CAACpuD,EAAOjE,OACN,KAAKuzD,UAAY,IACnB3tD,EAAa,CACX2tD,QAAS,CACX,OAEG,CACL,IAAM/pC,EAAWklC,GAAY1oD,EAAQwjB,QAAQ,EAAEhqB,KAAK,KAAMyE,EAAQ,KAAKuvD,cAAc,EACrFnB,EAAe,KAAKoC,aAAazuD,CAAAA,EAEjC,KAAK84B,MAAQ,KAAKo1B,SAAS7B,EAAcrsD,CAAAA,EACzC,KAAKuqD,WAAa,KAAK4D,cAAc9B,EAAcrsD,CAAAA,EACnD,KAAK2pD,KAAO,KAAKyE,QAAQ/B,EAAcrsD,CAAAA,EACvC,KAAKwqD,UAAY,KAAK+D,aAAalC,EAAcrsD,CAAAA,EACjD,KAAK4pD,OAAS,KAAK4E,UAAUnC,EAAcrsD,CAAAA,EAE3C,IAAMW,EAAO,KAAK8sD,MAAQhE,GAAe,KAAMzpD,CAAAA,EACzC2uD,EAAkBxvD,OAAOyB,OAAO,CAAA,EAAI4iB,EAAU7iB,CAAAA,EAC9CqrD,EAAYL,GAAmB,KAAKpzD,MAAOyH,EAAS2uD,CAAAA,EACpDC,EAAkB7C,GAAmB/rD,EAAS2uD,EAAiB3C,EAAW,KAAKzzD,KAAK,EAE1F,KAAK6yD,OAASY,EAAUZ,OACxB,KAAKK,OAASO,EAAUP,OAExB7rD,EAAa,CACX2tD,QAAS,EACT/rD,EAAGotD,EAAgBptD,EACnBC,EAAGmtD,EAAgBntD,EACnBsU,MAAOpV,EAAKoV,MACZD,OAAQnV,EAAKmV,OACb+3C,OAAQrqC,EAAShiB,EACjBssD,OAAQtqC,EAAS/hB,CACnB,EAGF,KAAKksD,cAAgBtB,EACrB,KAAKjkD,SAAW/P,OAEZuH,GACF,KAAK4O,mBAAkB,EAAGtQ,OAAO,KAAM0B,CAAAA,EAGrC0pB,GAAWtpB,EAAQ6uD,UACrB7uD,EAAQ6uD,SAASr1D,KAAK,KAAM,CAACjB,MAAO,KAAKA,MAAOmxD,QAAS,KAAMjZ,OAAAA,CAAM,CAAA,CAEzE,CAEAqe,UAAUC,EAAcvnD,EAAK7G,EAAMX,EAAS,CAC1C,IAAMgvD,EAAgB,KAAKC,iBAAiBF,EAAcpuD,EAAMX,CAAAA,EAEhEwH,EAAI83B,OAAO0vB,EAAc7yB,GAAI6yB,EAAc5yB,EAAE,EAC7C50B,EAAI83B,OAAO0vB,EAAc3yB,GAAI2yB,EAAc1yB,EAAE,EAC7C90B,EAAI83B,OAAO0vB,EAAcE,GAAIF,EAAcG,EAAE,CAC/C,CAEAF,iBAAiBF,EAAcpuD,EAAMX,EAAS,CAC5C,GAAM,CAACorD,OAAAA,EAAQK,OAAAA,CAAM,EAAI,KACnB,CAACH,UAAAA,EAAWW,aAAAA,CAAAA,EAAgBjsD,EAC5B,CAACg6C,QAAAA,EAASC,SAAAA,EAAUC,WAAAA,EAAYC,YAAAA,CAAAA,EAAeN,GAAcoS,CAAAA,EAC7D,CAACzqD,EAAG4tD,EAAK3tD,EAAG4tD,CAAAA,EAAON,EACnB,CAACh5C,MAAAA,EAAOD,OAAAA,CAAAA,EAAUnV,EACpBw7B,EAAIE,EAAI6yB,EAAI9yB,EAAIE,EAAI6yB,EAExB,OAAI1D,IAAW,UACbnvB,EAAK+yB,EAAOv5C,EAAS,EAEjBs1C,IAAW,QACbjvB,EAAKizB,EACL/yB,EAAKF,EAAKmvB,EAGVlvB,EAAKE,EAAKgvB,EACV6D,EAAK7yB,EAAKgvB,IAEVnvB,EAAKizB,EAAMr5C,EACXsmB,EAAKF,EAAKmvB,EAGVlvB,EAAKE,EAAKgvB,EACV6D,EAAK7yB,EAAKgvB,GAGZ4D,EAAK/yB,IAEDivB,IAAW,OACb/uB,EAAK+yB,EAAMj2D,KAAKoC,IAAIy+C,EAASE,CAAeoR,EAAAA,EACnCF,IAAW,QACpB/uB,EAAK+yB,EAAMr5C,EAAQ5c,KAAKoC,IAAI0+C,EAAUE,CAAemR,EAAAA,EAErDjvB,EAAK,KAAKwxB,OAGRpC,IAAW,OACbrvB,EAAKizB,EACL/yB,EAAKF,EAAKkvB,EAGVnvB,EAAKE,EAAKivB,EACV4D,EAAK7yB,EAAKivB,IAEVlvB,EAAKizB,EAAMv5C,EACXwmB,EAAKF,EAAKkvB,EAGVnvB,EAAKE,EAAKivB,EACV4D,EAAK7yB,EAAKivB,GAEZ6D,EAAK/yB,GAEA,CAACD,GAAAA,EAAIE,GAAAA,EAAI6yB,GAAAA,EAAI9yB,GAAAA,EAAIE,GAAAA,EAAI6yB,GAAAA,CAAE,CAChC,CAEAnvB,UAAUsvB,EAAI9nD,EAAKxH,EAAS,CAC1B,IAAM84B,EAAQ,KAAKA,MACb9+B,EAAS8+B,EAAM9+B,OACjB6sD,EAAW4D,EAAcxwD,EAE7B,GAAID,EAAQ,CACV,IAAMkrD,EAAYC,GAAcnlD,EAAQilD,IAAK,KAAKzjD,EAAG,KAAKuU,KAAK,EAa/D,IAXAu5C,EAAG9tD,EAAI0qD,GAAY,KAAMlsD,EAAQ2zB,WAAY3zB,CAAAA,EAE7CwH,EAAI81B,UAAY4nB,EAAU5nB,UAAUt9B,EAAQ2zB,UAAU,EACtDnsB,EAAIi2B,aAAe,SAEnBopB,EAAYtzB,GAAOvzB,EAAQ6mD,SAAS,EACpC4D,EAAezqD,EAAQyqD,aAEvBjjD,EAAI8T,UAAYtb,EAAQuvD,WACxB/nD,EAAI8rB,KAAOuzB,EAAUnsB,OAEhBzgC,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EACxBuN,EAAI0+C,SAASptB,EAAM7+B,CAAAA,EAAIirD,EAAU1jD,EAAE8tD,EAAG9tD,CAAC,EAAG8tD,EAAG7tD,EAAIolD,EAAUrzB,WAAa,CAAA,EACxE87B,EAAG7tD,GAAKolD,EAAUrzB,WAAai3B,EAE3BxwD,EAAI,IAAMD,IACZs1D,EAAG7tD,GAAKzB,EAAQ0qD,kBAAoBD,GAI5C,CAKA+E,cAAchoD,EAAK8nD,EAAIr1D,EAAGirD,EAAWllD,EAAS,CAC5C,IAAM8sD,EAAa,KAAKiB,YAAY9zD,CAAE,EAChCgzD,EAAkB,KAAKe,iBAAiB/zD,CAAE,EAC1C,CAACgpD,UAAAA,EAAWC,SAAAA,CAAAA,EAAYljD,EACxB6pD,EAAWt2B,GAAOvzB,EAAQ6pD,QAAQ,EAClC4F,EAASvD,GAAY,KAAM,OAAQlsD,CAAAA,EACnC0vD,EAAYxK,EAAU1jD,EAAEiuD,CAAAA,EACxBE,EAAU1M,EAAY4G,EAASr2B,YAAcq2B,EAASr2B,WAAayvB,GAAa,EAAI,EACpF2M,EAASN,EAAG7tD,EAAIkuD,EAEtB,GAAI3vD,EAAQmjD,cAAe,CACzB,IAAMyC,EAAc,CAClBvtC,OAAQlf,KAAKC,IAAI8pD,EAAUD,CAAa,EAAA,EACxC/nC,WAAY+xC,EAAgB/xC,WAC5BtC,SAAUq0C,EAAgBr0C,SAC1BgD,YAAa,CACf,EAGMgC,EAAUsnC,EAAUG,WAAWqK,EAAWxM,CAAAA,EAAYA,EAAW,EACjErlC,EAAU+xC,EAAS3M,EAAY,EAGrCz7C,EAAIgU,YAAcxb,EAAQ6vD,mBAC1BroD,EAAI8T,UAAYtb,EAAQ6vD,mBACxBzW,GAAU5xC,EAAKo+C,EAAahoC,EAASC,CAAAA,EAGrCrW,EAAIgU,YAAcsxC,EAAWrxC,YAC7BjU,EAAI8T,UAAYwxC,EAAWvxC,gBAC3B69B,GAAU5xC,EAAKo+C,EAAahoC,EAASC,CAAAA,MAChC,CAELrW,EAAImU,UAAY1c,GAAS6tD,EAAWlxC,WAAW,EAAIziB,KAAKoC,IAAO4D,GAAAA,OAAOW,OAAOgtD,EAAWlxC,WAAW,CAAMkxC,EAAAA,EAAWlxC,aAAe,EACnIpU,EAAIgU,YAAcsxC,EAAWrxC,YAC7BjU,EAAI03B,YAAY4tB,EAAWlwB,YAAc,CAAA,CAAE,EAC3Cp1B,EAAI23B,eAAiB2tB,EAAWhwB,kBAAoB,EAGpD,IAAMgzB,EAAS5K,EAAUG,WAAWqK,EAAWxM,CAAAA,EACzC6M,EAAS7K,EAAUG,WAAWH,EAAUY,MAAM4J,EAAW,CAAA,EAAIxM,EAAW,CAAA,EACxE/Q,EAAe0H,GAAciT,EAAW3a,YAAY,EAEtDhzC,OAAOW,OAAOqyC,CAAAA,EAAc1N,KAAKjwB,GAAKA,IAAM,CAAI,GAClDhN,EAAI43B,UAAS,EACb53B,EAAI8T,UAAYtb,EAAQ6vD,mBACxB7U,GAAmBxzC,EAAK,CACtBhG,EAAGsuD,EACHruD,EAAGmuD,EACHrnC,EAAG26B,EACHz6B,EAAGw6B,EACH5qC,OAAQ85B,CACV,CAAA,EACA3qC,EAAIiB,KAAI,EACRjB,EAAI+3B,OAAM,EAGV/3B,EAAI8T,UAAYwxC,EAAWvxC,gBAC3B/T,EAAI43B,UAAS,EACb4b,GAAmBxzC,EAAK,CACtBhG,EAAGuuD,EACHtuD,EAAGmuD,EAAS,EACZrnC,EAAG26B,EAAW,EACdz6B,EAAGw6B,EAAY,EACf5qC,OAAQ85B,CACV,CAAA,EACA3qC,EAAIiB,KAAI,IAGRjB,EAAI8T,UAAYtb,EAAQ6vD,mBACxBroD,EAAIo3B,SAASkxB,EAAQF,EAAQ1M,EAAUD,CAAAA,EACvCz7C,EAAIwoD,WAAWF,EAAQF,EAAQ1M,EAAUD,CAAAA,EAEzCz7C,EAAI8T,UAAYwxC,EAAWvxC,gBAC3B/T,EAAIo3B,SAASmxB,EAAQH,EAAS,EAAG1M,EAAW,EAAGD,EAAY,CAAA,GAK/Dz7C,EAAI8T,UAAY,KAAK2yC,gBAAgBh0D,CAAE,CACzC,CAEAg2D,SAASX,EAAI9nD,EAAKxH,EAAS,CACzB,GAAM,CAAC2pD,KAAAA,CAAAA,EAAQ,KACT,CAACkB,YAAAA,EAAaqF,UAAAA,EAAWtF,cAAAA,EAAe3H,UAAAA,EAAWC,SAAAA,EAAUn7B,WAAAA,CAAAA,EAAc/nB,EAC3E6pD,EAAWt2B,GAAOvzB,EAAQ6pD,QAAQ,EACpCc,EAAiBd,EAASr2B,WAC1B28B,EAAe,EAEbjL,EAAYC,GAAcnlD,EAAQilD,IAAK,KAAKzjD,EAAG,KAAKuU,KAAK,EAEzDq6C,EAAiB,SAAS1xC,EAAM,CACpClX,EAAI0+C,SAASxnC,EAAMwmC,EAAU1jD,EAAE8tD,EAAG9tD,EAAI2uD,CAAAA,EAAeb,EAAG7tD,EAAIkpD,EAAiB,CAAA,EAC7E2E,EAAG7tD,GAAKkpD,EAAiBE,CAC3B,EAEMwF,EAA0BnL,EAAU5nB,UAAU4yB,CAAAA,EAChD/F,EAAUmG,EAAWjG,EAAOpwD,EAAG0pB,EAAGnhB,EAAM63B,EAiB5C,IAfA7yB,EAAI81B,UAAY4yB,EAChB1oD,EAAIi2B,aAAe,SACnBj2B,EAAI8rB,KAAOu2B,EAASnvB,OAEpB40B,EAAG9tD,EAAI0qD,GAAY,KAAMmE,EAAyBrwD,CAAAA,EAGlDwH,EAAI8T,UAAYtb,EAAQgtD,UACxB5iC,GAAK,KAAKmgC,WAAY6F,CAAAA,EAEtBD,EAAevF,GAAiByF,IAA4B,QACxDH,IAAc,SAAYhN,EAAW,EAAIn7B,EAAem7B,EAAW,EAAIn7B,EACvE,EAGC9tB,EAAI,EAAGuI,EAAOmnD,EAAK3vD,OAAQC,EAAIuI,EAAM,EAAEvI,EAAG,CAc7C,IAbAkwD,EAAWR,EAAK1vD,CAAE,EAClBq2D,EAAY,KAAKrC,gBAAgBh0D,CAAE,EAEnCuN,EAAI8T,UAAYg1C,EAChBlmC,GAAK+/B,EAASC,OAAQgG,CAAAA,EAEtB/F,EAAQF,EAASE,MAEbO,GAAiBP,EAAMrwD,SACzB,KAAKw1D,cAAchoD,EAAK8nD,EAAIr1D,EAAGirD,EAAWllD,CAAAA,EAC1C2qD,EAAiBxxD,KAAKoC,IAAIsuD,EAASr2B,WAAYyvB,CAAAA,GAG5Ct/B,EAAI,EAAG0W,EAAOgwB,EAAMrwD,OAAQ2pB,EAAI0W,EAAM,EAAE1W,EAC3CysC,EAAe/F,EAAM1mC,CAAE,CAAA,EAEvBgnC,EAAiBd,EAASr2B,WAG5BpJ,GAAK+/B,EAASG,MAAO8F,CAAAA,CACvB,CAGAD,EAAe,EACfxF,EAAiBd,EAASr2B,WAG1BpJ,GAAK,KAAKogC,UAAW4F,CAAAA,EACrBd,EAAG7tD,GAAKopD,CACV,CAEA0F,WAAWjB,EAAI9nD,EAAKxH,EAAS,CAC3B,IAAM4pD,EAAS,KAAKA,OACd5vD,EAAS4vD,EAAO5vD,OAClB8vD,EAAY7vD,EAEhB,GAAID,EAAQ,CACV,IAAMkrD,EAAYC,GAAcnlD,EAAQilD,IAAK,KAAKzjD,EAAG,KAAKuU,KAAK,EAa/D,IAXAu5C,EAAG9tD,EAAI0qD,GAAY,KAAMlsD,EAAQwwD,YAAaxwD,CAAAA,EAC9CsvD,EAAG7tD,GAAKzB,EAAQ8qD,gBAEhBtjD,EAAI81B,UAAY4nB,EAAU5nB,UAAUt9B,EAAQwwD,WAAW,EACvDhpD,EAAIi2B,aAAe,SAEnBqsB,EAAav2B,GAAOvzB,EAAQ8pD,UAAU,EAEtCtiD,EAAI8T,UAAYtb,EAAQywD,YACxBjpD,EAAI8rB,KAAOw2B,EAAWpvB,OAEjBzgC,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EACxBuN,EAAI0+C,SAAS0D,EAAO3vD,CAAAA,EAAIirD,EAAU1jD,EAAE8tD,EAAG9tD,CAAC,EAAG8tD,EAAG7tD,EAAIqoD,EAAWt2B,WAAa,CAAA,EAC1E87B,EAAG7tD,GAAKqoD,EAAWt2B,WAAaxzB,EAAQ+qD,cAG9C,CAEArsB,eAAe4wB,EAAI9nD,EAAKkpD,EAAa1wD,EAAS,CAC5C,GAAM,CAACorD,OAAAA,EAAQK,OAAAA,CAAM,EAAI,KACnB,CAACjqD,EAAAA,EAAGC,EAAAA,CAAAA,EAAK6tD,EACT,CAACv5C,MAAAA,EAAOD,OAAAA,CAAAA,EAAU46C,EAClB,CAAC1W,QAAAA,EAASC,SAAAA,EAAUC,WAAAA,EAAYC,YAAAA,CAAAA,EAAeN,GAAc75C,EAAQisD,YAAY,EAEvFzkD,EAAI8T,UAAYtb,EAAQub,gBACxB/T,EAAIgU,YAAcxb,EAAQyb,YAC1BjU,EAAImU,UAAY3b,EAAQ4b,YAExBpU,EAAI43B,UAAS,EACb53B,EAAI63B,OAAO79B,EAAIw4C,EAASv4C,CAAAA,EACpBgqD,IAAW,OACb,KAAKqD,UAAUQ,EAAI9nD,EAAKkpD,EAAa1wD,CAAAA,EAEvCwH,EAAI83B,OAAO99B,EAAIuU,EAAQkkC,EAAUx4C,CAAAA,EACjC+F,EAAImpD,iBAAiBnvD,EAAIuU,EAAOtU,EAAGD,EAAIuU,EAAOtU,EAAIw4C,CAAAA,EAC9CwR,IAAW,UAAYL,IAAW,SACpC,KAAK0D,UAAUQ,EAAI9nD,EAAKkpD,EAAa1wD,CAAAA,EAEvCwH,EAAI83B,OAAO99B,EAAIuU,EAAOtU,EAAIqU,EAASqkC,CAAAA,EACnC3yC,EAAImpD,iBAAiBnvD,EAAIuU,EAAOtU,EAAIqU,EAAQtU,EAAIuU,EAAQokC,EAAa14C,EAAIqU,CAAAA,EACrE21C,IAAW,UACb,KAAKqD,UAAUQ,EAAI9nD,EAAKkpD,EAAa1wD,CAAAA,EAEvCwH,EAAI83B,OAAO99B,EAAI04C,EAAYz4C,EAAIqU,CAAAA,EAC/BtO,EAAImpD,iBAAiBnvD,EAAGC,EAAIqU,EAAQtU,EAAGC,EAAIqU,EAASokC,CAAAA,EAChDuR,IAAW,UAAYL,IAAW,QACpC,KAAK0D,UAAUQ,EAAI9nD,EAAKkpD,EAAa1wD,CAAAA,EAEvCwH,EAAI83B,OAAO99B,EAAGC,EAAIu4C,CAAAA,EAClBxyC,EAAImpD,iBAAiBnvD,EAAGC,EAAGD,EAAIw4C,EAASv4C,CAAAA,EACxC+F,EAAIiqC,UAAS,EAEbjqC,EAAIiB,KAAI,EAEJzI,EAAQ4b,YAAc,GACxBpU,EAAI+3B,OAAM,CAEd,CAMAqxB,uBAAuB5wD,EAAS,CAC9B,IAAMzH,EAAQ,KAAKA,MACbC,EAAQ,KAAK8H,YACbuwD,EAAQr4D,GAASA,EAAMgJ,EACvBsvD,EAAQt4D,GAASA,EAAMiJ,EAC7B,GAAIovD,GAASC,EAAO,CAClB,IAAMttC,EAAWklC,GAAY1oD,EAAQwjB,QAAQ,EAAEhqB,KAAK,KAAM,KAAKY,QAAS,KAAKozD,cAAc,EAC3F,GAAI,CAAChqC,EACH,OAEF,IAAM7iB,EAAO,KAAK8sD,MAAQhE,GAAe,KAAMzpD,CAAAA,EACzC2uD,EAAkBxvD,OAAOyB,OAAO,CAAA,EAAI4iB,EAAU,KAAKiqC,KAAK,EACxDzB,EAAYL,GAAmBpzD,EAAOyH,EAAS2uD,CAAAA,EAC/Cp2C,EAAQwzC,GAAmB/rD,EAAS2uD,EAAiB3C,EAAWzzD,CAAAA,GAClEs4D,EAAM9yD,MAAQwa,EAAM/W,GAAKsvD,EAAM/yD,MAAQwa,EAAM9W,KAC/C,KAAK2pD,OAASY,EAAUZ,OACxB,KAAKK,OAASO,EAAUP,OACxB,KAAK11C,MAAQpV,EAAKoV,MAClB,KAAKD,OAASnV,EAAKmV,OACnB,KAAK+3C,OAASrqC,EAAShiB,EACvB,KAAKssD,OAAStqC,EAAS/hB,EACvB,KAAK+M,mBAAkB,EAAGtQ,OAAO,KAAMqa,CAAAA,GAG7C,CAMAw4C,aAAc,CACZ,MAAO,CAAC,CAAC,KAAKxD,OAChB,CAEArzD,KAAKsN,EAAK,CACR,IAAMxH,EAAU,KAAKA,QAAQq1B,WAAW,KAAKnqB,WAAU,CAAA,EACnDqiD,EAAU,KAAKA,QAEnB,GAAI,CAACA,EACH,OAGF,KAAKqD,uBAAuB5wD,CAAAA,EAE5B,IAAM0wD,EAAc,CAClB36C,MAAO,KAAKA,MACZD,OAAQ,KAAKA,MACf,EACMw5C,EAAK,CACT9tD,EAAG,KAAKA,EACRC,EAAG,KAAKA,CACV,EAGA8rD,EAAUp0D,KAAKwY,IAAI47C,CAAW,EAAA,KAAO,EAAIA,EAEzC,IAAM7jC,EAAUO,GAAUjqB,EAAQ0pB,OAAO,EAGnCsnC,EAAoB,KAAKl4B,MAAM9+B,QAAU,KAAKuwD,WAAWvwD,QAAU,KAAK2vD,KAAK3vD,QAAU,KAAKwwD,UAAUxwD,QAAU,KAAK4vD,OAAO5vD,OAE9HgG,EAAQ2wB,SAAWqgC,IACrBxpD,EAAIm3B,KAAI,EACRn3B,EAAIypD,YAAc1D,EAGlB,KAAK7uB,eAAe4wB,EAAI9nD,EAAKkpD,EAAa1wD,CAAAA,EAE1ComD,GAAsB5+C,EAAKxH,EAAQqmD,aAAa,EAEhDiJ,EAAG7tD,GAAKioB,EAAQhoB,IAGhB,KAAKs+B,UAAUsvB,EAAI9nD,EAAKxH,CAAAA,EAGxB,KAAKiwD,SAASX,EAAI9nD,EAAKxH,CAAAA,EAGvB,KAAKuwD,WAAWjB,EAAI9nD,EAAKxH,CAAAA,EAEzB4mD,GAAqBp/C,EAAKxH,EAAQqmD,aAAa,EAE/C7+C,EAAIq3B,QAAO,EAEf,CAMAsR,mBAAoB,CAClB,OAAO,KAAK/1C,SAAW,CAAA,CACzB,CAOAg2C,kBAAkBC,EAAgBwY,EAAe,CAC/C,IAAMvY,EAAa,KAAKl2C,QAClB6D,EAASoyC,EAAel1B,IAAI,CAAC,CAACpY,aAAAA,EAAcN,MAAAA,CAAK,IAAM,CAC3D,IAAMa,EAAO,KAAK/K,MAAMwR,eAAehH,CAAAA,EAEvC,GAAI,CAACO,EACH,MAAM,IAAIoe,MAAM,kCAAoC3e,CAAc,EAGpE,MAAO,CACLA,aAAAA,EACAwD,QAASjD,EAAKD,KAAKZ,CAAM,EACzBA,MAAAA,CACF,CACF,CAAA,EACM6mB,EAAU,CAACinB,GAAeD,EAAYryC,CAAAA,EACtCizD,EAAkB,KAAKC,iBAAiBlzD,EAAQ4qD,CAAAA,GAElDv/B,GAAW4nC,KACb,KAAK92D,QAAU6D,EACf,KAAKuvD,eAAiB3E,EACtB,KAAKuI,oBAAsB,GAC3B,KAAKlzD,OAAO,EAAI,EAEpB,CASAipD,YAAYrrC,EAAG20B,EAAQxG,EAAc,GAAM,CACzC,GAAIwG,GAAU,KAAK2gB,oBACjB,MAAO,GAET,KAAKA,oBAAsB,GAE3B,IAAMpxD,EAAU,KAAKA,QACfswC,EAAa,KAAKl2C,SAAW,CAAA,EAC7B6D,EAAS,KAAK+yC,mBAAmBl1B,EAAGw0B,EAAYG,EAAQxG,CAAAA,EAKxDinB,EAAkB,KAAKC,iBAAiBlzD,EAAQ6d,CAAAA,EAGhDwN,EAAUmnB,GAAU,CAACF,GAAetyC,EAAQqyC,CAAe4gB,GAAAA,EAGjE,OAAI5nC,IACF,KAAKlvB,QAAU6D,GAEX+B,EAAQ2wB,SAAW3wB,EAAQ6uD,YAC7B,KAAKrB,eAAiB,CACpBhsD,EAAGsa,EAAEta,EACLC,EAAGqa,EAAEra,CACP,EAEA,KAAKvD,OAAO,GAAMuyC,CAAAA,IAIfnnB,CACT,CAWA0nB,mBAAmBl1B,EAAGw0B,EAAYG,EAAQxG,EAAa,CACrD,IAAMjqC,EAAU,KAAKA,QAErB,GAAI8b,EAAEpjB,OAAS,WACb,MAAO,CAAA,EAGT,GAAI,CAACuxC,EAGH,OAAOqG,EAAWtqC,OAAO/L,GACvB,KAAK1B,MAAM8K,KAAKyG,SAAS7P,EAAE8I,YAAY,GACvC,KAAKxK,MAAMwR,eAAe9P,EAAE8I,YAAY,EAAEoC,WAAWgH,UAAUlS,EAAEwI,KAAK,IAAMpK,MAAAA,EAKhF,IAAM4F,EAAS,KAAK1F,MAAM42C,0BAA0BrzB,EAAG9b,EAAQ8C,KAAM9C,EAASywC,CAAAA,EAE9E,OAAIzwC,EAAQmB,SACVlD,EAAOkD,QAAO,EAGTlD,CACT,CASAkzD,iBAAiBlzD,EAAQ6d,EAAG,CAC1B,GAAM,CAAC+xC,OAAAA,EAAQC,OAAAA,EAAQ9tD,QAAAA,CAAO,EAAI,KAC5BwjB,EAAWklC,GAAY1oD,EAAQwjB,QAAQ,EAAEhqB,KAAK,KAAMyE,EAAQ6d,CAAAA,EAClE,OAAO0H,IAAa,KAAUqqC,IAAWrqC,EAAShiB,GAAKssD,IAAWtqC,EAAS/hB,EAC7E,CACF,EAEA4vD,GAAe,CACbltD,GAAI,UACJyjD,SAAU0F,GACV5E,YAAAA,GAEA4I,UAAU/4D,EAAOyjD,EAAOh8C,EAAS,CAC3BA,IACFzH,EAAMmxD,QAAU,IAAI4D,GAAQ,CAAC/0D,MAAAA,EAAOyH,QAAAA,CAAO,CAAA,EAE/C,EAEA+1B,aAAax9B,EAAOyjD,EAAOh8C,EAAS,CAC9BzH,EAAMmxD,SACRnxD,EAAMmxD,QAAQphD,WAAWtI,CAAAA,CAE7B,EAEAkK,MAAM3R,EAAOyjD,EAAOh8C,EAAS,CACvBzH,EAAMmxD,SACRnxD,EAAMmxD,QAAQphD,WAAWtI,CAAAA,CAE7B,EAEAuxD,UAAUh5D,EAAO,CACf,IAAMmxD,EAAUnxD,EAAMmxD,QAEtB,GAAIA,GAAWA,EAAQqH,YAAW,EAAI,CACpC,IAAMzgD,EAAO,CACXo5C,QAAAA,CACF,EAEA,GAAInxD,EAAMq/B,cAAc,oBAAqB,CAAC,GAAGtnB,EAAM4zB,WAAY,EAAI,CAAA,IAAO,GAC5E,OAGFwlB,EAAQxvD,KAAK3B,EAAMiP,GAAG,EAEtBjP,EAAMq/B,cAAc,mBAAoBtnB,CAAAA,EAE5C,EAEAu3C,WAAWtvD,EAAO+X,EAAM,CACtB,GAAI/X,EAAMmxD,QAAS,CAEjB,IAAMplC,EAAmBhU,EAAKmgC,OAC1Bl4C,EAAMmxD,QAAQvC,YAAY72C,EAAKvV,MAAOupB,EAAkBhU,EAAK25B,WAAW,IAE1E35B,EAAKgZ,QAAU,IAGrB,EAEAjqB,SAAU,CACRsxB,QAAS,GACTk+B,SAAU,KACVrrC,SAAU,UACVjI,gBAAiB,kBACjBg0C,WAAY,OACZ1I,UAAW,CACTvoC,OAAQ,MACV,EACAmsC,aAAc,EACdC,kBAAmB,EACnB/2B,WAAY,OACZq5B,UAAW,OACXnC,YAAa,EACbhB,SAAU,CAAA,EAEVqG,UAAW,OACXO,YAAa,OACb1F,cAAe,EACfD,gBAAiB,EACjBhB,WAAY,CACVxrC,OAAQ,MACV,EACAkyC,YAAa,OACb9mC,QAAS,EACT6hC,aAAc,EACdD,UAAW,EACXW,aAAc,EACdhJ,UAAW,CAACz7C,EAAKtG,IAASA,EAAK2oD,SAASlpD,KACxCuiD,SAAU,CAAC17C,EAAKtG,IAASA,EAAK2oD,SAASlpD,KACvCkvD,mBAAoB,OACpBjF,cAAe,GACf7iC,WAAY,EACZtM,YAAa,gBACbG,YAAa,EACbtc,UAAW,CACTxG,SAAU,IACVuE,OAAQ,cACV,EACA6C,WAAY,CACV2U,QAAS,CACPnc,KAAM,SACNkH,WAAY,CAAC,IAAK,IAAK,QAAS,SAAU,SAAU,QAAS,CAC/D,EACA2tD,QAAS,CACPlwD,OAAQ,SACRvE,SAAU,GACZ,CACF,EACAH,UAAW4zD,EACb,EAEAz8B,cAAe,CACb+5B,SAAU,OACVC,WAAY,OACZjD,UAAW,MACb,EAEAnsC,YAAa,CACXC,YAAc3D,GAASA,IAAS,UAAYA,IAAS,YAAcA,IAAS,WAC5E4D,WAAY,GACZjiB,UAAW,CACTgiB,YAAa,GACbC,WAAY,EACd,EACAtb,UAAW,CACTkyD,UAAW,EACb,EACAtxD,WAAY,CACVsxD,UAAW,WACb,CACF,EAGA7pB,uBAAwB,CAAC,aAAc,CACzC,iHCl0CM8pB,GAAc,CAAC5lD,EAAQpF,EAAKhE,EAAOivD,KACnC,OAAOjrD,GAAQ,UACjBhE,EAAQoJ,EAAO5Q,KAAKwL,CAAO,EAAA,EAC3BirD,EAAY9Q,QAAQ,CAACn+C,MAAAA,EAAOwK,MAAOxG,CAAG,CAAA,GAC7B8P,MAAM9P,CAAM,IACrBhE,EAAQ,MAEHA,GAGT,SAASkvD,GAAe9lD,EAAQpF,EAAKhE,EAAOivD,EAAa,CACvD,IAAM5gC,EAAQjlB,EAAO2K,QAAQ/P,CAAAA,EAC7B,GAAIqqB,IAAU,GACZ,OAAO2gC,GAAY5lD,EAAQpF,EAAKhE,EAAOivD,CAAAA,EAEzC,IAAMz7C,EAAOpK,EAAO+lD,YAAYnrD,CAAAA,EAChC,OAAOqqB,IAAU7a,EAAOxT,EAAQquB,CAClC,CAEA,IAAM6B,GAAa,CAAClwB,EAAOlH,IAAQkH,IAAU,KAAO,KAAOo2B,GAAY1/B,KAAKg4B,MAAM1uB,CAAAA,EAAQ,EAAGlH,CAAI,EAEjG,SAASs2D,GAAkBnxD,EAAO,CAChC,IAAMmL,EAAS,KAAKC,UAAS,EAE7B,OAAIpL,GAAS,GAAKA,EAAQmL,EAAO7R,OACxB6R,EAAOnL,CAAM,EAEfA,CACT,CAEe,IAAMoxD,GAAN,cAA4B59B,EAAAA,CAEzC,OAAO/vB,GAAK,WAKZ,OAAO9E,SAAW,CAChBwS,MAAO,CACLkmB,SAAU85B,EACZ,GAGF95D,YAAY8E,EAAK,CACf,MAAMA,CAAAA,EAGN,KAAKk1D,YAAc15D,OACnB,KAAK25D,YAAc,EACnB,KAAKC,aAAe,CAAA,CACtB,CAEAlwC,KAAK0jB,EAAc,CACjB,IAAMysB,EAAQ,KAAKD,aACnB,GAAIC,EAAMl4D,OAAQ,CAChB,IAAM6R,EAAS,KAAKC,UAAS,EAC7B,OAAW,CAACrJ,MAAAA,EAAOwK,MAAAA,CAAK,IAAKilD,EACvBrmD,EAAOpJ,CAAM,IAAKwK,GACpBpB,EAAOuE,OAAO3N,EAAO,CAAA,EAGzB,KAAKwvD,aAAe,CAAA,EAEtB,MAAMlwC,KAAK0jB,CAAAA,CACb,CAEAr6B,MAAM3E,EAAKhE,EAAO,CAChB,GAAI4P,GAAc5L,CAAM,EACtB,OAAO,KAET,IAAMoF,EAAS,KAAKC,UAAS,EAC7BrJ,OAAAA,EAAQS,SAAST,CAAUoJ,GAAAA,EAAOpJ,CAAAA,IAAWgE,EAAMhE,EAC/CkvD,GAAe9lD,EAAQpF,EAAKyC,GAAezG,EAAOgE,CAAAA,EAAM,KAAKwrD,YAAY,EACtEt/B,GAAWlwB,EAAOoJ,EAAO7R,OAAS,CAAA,CAC3C,CAEAu8B,qBAAsB,CACpB,GAAM,CAAClyB,WAAAA,EAAYC,WAAAA,CAAAA,EAAc,KAAKF,cAAa,EAC/C,CAAChL,IAAAA,EAAKmC,IAAAA,CAAG,EAAI,KAAKkR,UAAU,EAAI,EAEhC,KAAKzM,QAAQq6C,SAAW,UACrBh2C,IACHjL,EAAM,GAEHkL,IACH/I,EAAM,KAAKuQ,UAAS,EAAG9R,OAAS,IAIpC,KAAKZ,IAAMA,EACX,KAAKmC,IAAMA,CACb,CAEAo7B,YAAa,CACX,IAAMv9B,EAAM,KAAKA,IACXmC,EAAM,KAAKA,IACXyZ,EAAS,KAAKhV,QAAQgV,OACtBnD,EAAQ,CAAA,EACVhG,EAAS,KAAKC,UAAS,EAG3BD,EAASzS,IAAS,GAAKmC,IAAQsQ,EAAO7R,OAAS,EAAK6R,EAASA,EAAOuX,MAAMhqB,EAAKmC,EAAM,CAAE,EAEvF,KAAKy2D,YAAc74D,KAAKoC,IAAIsQ,EAAO7R,QAAUgb,EAAS,EAAI,GAAI,CAAA,EAC9D,KAAK+8C,YAAc,KAAK34D,KAAO4b,EAAS,GAAM,GAE9C,QAAStU,EAAQtH,EAAKsH,GAASnF,EAAKmF,IAClCmR,EAAM5W,KAAK,CAACyF,MAAAA,CAAK,CAAA,EAEnB,OAAOmR,CACT,CAEA3E,iBAAiBxM,EAAO,CACtB,OAAOmxD,GAAkBr4D,KAAK,KAAMkH,CAAAA,CACtC,CAKA1B,WAAY,CACV,MAAMA,UAAS,EAEV,KAAK0U,aAAY,IAEpB,KAAKiP,eAAiB,CAAC,KAAKA,eAEhC,CAGA/Q,iBAAiBlR,EAAO,CACtB,OAAI,OAAOA,GAAU,WACnBA,EAAQ,KAAK0K,MAAM1K,CAAAA,GAGdA,IAAU,KAAO8L,IAAM,KAAKgL,oBAAoB9W,EAAQ,KAAKqxD,aAAe,KAAKC,WAAW,CACrG,CAIAlgD,gBAAgBrP,EAAO,CACrB,IAAMoP,EAAQ,KAAKA,MACnB,OAAIpP,EAAQ,GAAKA,EAAQoP,EAAM7X,OAAS,EAC/B,KAEF,KAAK4X,iBAAiBC,EAAMpP,CAAAA,EAAO/B,KAAK,CACjD,CAEAgX,iBAAiBojB,EAAO,CACtB,OAAO3hC,KAAKg4B,MAAM,KAAK4gC,YAAc,KAAK72B,mBAAmBJ,CAAS,EAAA,KAAKk3B,WAAW,CACxF,CAEA18C,cAAe,CACb,OAAO,KAAK1T,MACd,CACF,ECrIA,SAASuwD,GAAcC,EAAmBC,EAAW,CACnD,IAAMxgD,EAAQ,CAAA,EAMR,CAACwoC,OAAAA,EAAQ7d,KAAAA,EAAMpjC,IAAAA,EAAKmC,IAAAA,EAAK+2D,UAAAA,EAAWjnD,MAAAA,EAAOknD,SAAAA,EAAUC,UAAAA,EAAWC,cAAAA,CAAAA,EAAiBL,EACjFM,EAAOl2B,GAAQ,EACfm2B,EAAYJ,EAAW,EACvB,CAACn5D,IAAKw5D,EAAMr3D,IAAKs3D,CAAAA,EAAQR,EACzBhuD,EAAa,CAACgO,GAAcjZ,CAAAA,EAC5BkL,EAAa,CAAC+N,GAAc9W,CAAAA,EAC5Bu3D,EAAe,CAACzgD,GAAchH,CAAAA,EAC9B0nD,GAAcF,EAAOD,IAASJ,EAAY,GAC5C/3C,EAAUu4C,IAASH,EAAOD,GAAQD,EAAYD,CAAQA,EAAAA,EACtDv2D,EAAQ82D,EAASC,EAASC,EAI9B,GAAI14C,EAAU24C,OAAe,CAAC/uD,GAAc,CAACC,EAC3C,MAAO,CAAC,CAAC5D,MAAOkyD,CAAI,EAAG,CAAClyD,MAAOmyD,CAAI,CAAE,EAGvCM,EAAYh6D,KAAK04B,KAAKghC,EAAOp4C,CAAAA,EAAWthB,KAAKqE,MAAMo1D,EAAOn4C,CAAAA,EACtD04C,EAAYR,IAEdl4C,EAAUu4C,GAAQG,EAAY14C,EAAUk4C,EAAYD,CAAQA,EAAAA,GAGzDrgD,GAAcigD,CAAY,IAE7Bn2D,EAAShD,KAAKirB,IAAI,GAAIkuC,CAAAA,EACtB73C,EAAUthB,KAAK04B,KAAKpX,EAAUte,CAAUA,EAAAA,GAGtCk+C,IAAW,SACb4Y,EAAU95D,KAAKqE,MAAMo1D,EAAOn4C,CAAWA,EAAAA,EACvCy4C,EAAU/5D,KAAK04B,KAAKghC,EAAOp4C,CAAWA,EAAAA,IAEtCw4C,EAAUL,EACVM,EAAUL,GAGRxuD,GAAcC,GAAck4B,GAAQ62B,IAAa93D,EAAMnC,GAAOojC,EAAM/hB,EAAU,GAAO,GAKvF04C,EAAYh6D,KAAKg4B,MAAMh4B,KAAKC,KAAKmC,EAAMnC,GAAOqhB,EAAS83C,CAAAA,CAAAA,EACvD93C,GAAWlf,EAAMnC,GAAO+5D,EACxBF,EAAU75D,EACV85D,EAAU33D,GACDu3D,GAITG,EAAU5uD,EAAajL,EAAM65D,EAC7BC,EAAU5uD,EAAa/I,EAAM23D,EAC7BC,EAAY9nD,EAAQ,EACpBoP,GAAWy4C,EAAUD,GAAWE,IAGhCA,GAAaD,EAAUD,GAAWx4C,EAG9B64C,GAAaH,EAAWh6D,KAAKg4B,MAAMgiC,CAAAA,EAAY14C,EAAU,GAAO,EAClE04C,EAAYh6D,KAAKg4B,MAAMgiC,CAAAA,EAEvBA,EAAYh6D,KAAK04B,KAAKshC,CAAAA,GAM1B,IAAMI,EAAgBp6D,KAAKoC,IACzBi4D,GAAe/4C,CAAAA,EACf+4C,GAAeP,CAAAA,CAAAA,EAEjB92D,EAAShD,KAAKirB,IAAI,GAAI/R,GAAcigD,CAAAA,EAAaiB,EAAgBjB,CAAS,EAC1EW,EAAU95D,KAAKg4B,MAAM8hC,EAAU92D,CAAUA,EAAAA,EACzC+2D,EAAU/5D,KAAKg4B,MAAM+hC,EAAU/2D,CAAUA,EAAAA,EAEzC,IAAIwnB,EAAI,EAiBR,IAhBItf,IACEouD,GAAiBQ,IAAY75D,GAC/ByY,EAAM5W,KAAK,CAACyF,MAAOtH,CAAG,CAAA,EAElB65D,EAAU75D,GACZuqB,IAGE2vC,GAAan6D,KAAKg4B,OAAO8hC,EAAUtvC,EAAIlJ,GAAWte,CAAAA,EAAUA,EAAQ/C,EAAKq6D,GAAkBr6D,EAAK25D,EAAYX,CAAqB,CAAA,GACnIzuC,KAEOsvC,EAAU75D,GACnBuqB,KAIGA,EAAIwvC,EAAW,EAAExvC,EAAG,CACzB,IAAM+vC,EAAYv6D,KAAKg4B,OAAO8hC,EAAUtvC,EAAIlJ,GAAWte,CAAUA,EAAAA,EACjE,GAAImI,GAAcovD,EAAYn4D,EAC5B,MAEFsW,EAAM5W,KAAK,CAACyF,MAAOgzD,CAAS,CAAA,CAC9B,CAEA,OAAIpvD,GAAcmuD,GAAiBS,IAAY33D,EAEzCsW,EAAM7X,QAAUs5D,GAAazhD,EAAMA,EAAM7X,OAAS,CAAA,EAAG0G,MAAOnF,EAAKk4D,GAAkBl4D,EAAKw3D,EAAYX,CAAqB,CAAA,EAC3HvgD,EAAMA,EAAM7X,OAAS,CAAE,EAAC0G,MAAQnF,EAEhCsW,EAAM5W,KAAK,CAACyF,MAAOnF,CAAG,CAAA,GAEf,CAAC+I,GAAc4uD,IAAY33D,IACpCsW,EAAM5W,KAAK,CAACyF,MAAOwyD,CAAO,CAAA,EAGrBrhD,CACT,CAEA,SAAS4hD,GAAkB/yD,EAAOqyD,EAAY,CAACn/C,WAAAA,EAAYskB,YAAAA,CAAW,EAAG,CACvE,IAAMy7B,EAAMt3C,GAAU6b,CAAAA,EAChB9lB,GAASwB,EAAaza,KAAKsgB,IAAIk6C,CAAAA,EAAOx6D,KAAKogB,IAAIo6C,CAAAA,IAAS,KACxD35D,EAAS,IAAO+4D,GAAc,GAAKryD,GAAO1G,OAChD,OAAOb,KAAKC,IAAI25D,EAAa3gD,EAAOpY,CAAAA,CACtC,CAEe,IAAM45D,GAAN,cAA8B1/B,EAAAA,CAE3Cn8B,YAAY8E,EAAK,CACf,MAAMA,CAAAA,EAGN,KAAKxD,MAAQhB,OAEb,KAAK+I,IAAM/I,OAEX,KAAK05D,YAAc15D,OAEnB,KAAKw7D,UAAYx7D,OACjB,KAAK25D,YAAc,CACrB,CAEA5mD,MAAM3E,EAAKhE,EAAO,CAIhB,OAHI4P,GAAc5L,CAAM,IAGnB,OAAOA,GAAQ,UAAYA,aAAelC,SAAW,CAACrB,SAAS,CAACuD,CAAM,EAClE,KAGF,CAACA,CACV,CAEAqtD,wBAAyB,CACvB,GAAM,CAAC3+C,YAAAA,CAAW,EAAI,KAAKnV,QACrB,CAACqE,WAAAA,EAAYC,WAAAA,CAAAA,EAAc,KAAKF,cAAa,EAC/C,CAAChL,IAAAA,EAAKmC,IAAAA,CAAG,EAAI,KAEXw4D,EAASv/C,GAAMpb,EAAMiL,EAAajL,EAAMob,EACxCw/C,EAASx/C,GAAMjZ,EAAM+I,EAAa/I,EAAMiZ,EAE9C,GAAIW,EAAa,CACf,IAAM8+C,EAAU9wD,GAAK/J,CAAAA,EACf86D,EAAU/wD,GAAK5H,CAAAA,EAEjB04D,EAAU,GAAKC,EAAU,EAC3BF,EAAO,CAAA,EACEC,EAAU,GAAKC,EAAU,GAClCH,EAAO,CAAA,EAIX,GAAI36D,IAAQmC,EAAK,CACf,IAAIyZ,EAASzZ,IAAQ,EAAI,EAAIpC,KAAKwY,IAAIpW,EAAM,GAAK,EAEjDy4D,EAAOz4D,EAAMyZ,CAAAA,EAERG,GACH4+C,EAAO36D,EAAM4b,CAAAA,EAGjB,KAAK5b,IAAMA,EACX,KAAKmC,IAAMA,CACb,CAEA44D,cAAe,CACb,IAAM/jC,EAAW,KAAKpwB,QAAQ6R,MAE1B,CAAC2e,cAAAA,EAAe4jC,SAAAA,CAAAA,EAAYhkC,EAC5BmiC,EAEJ,OAAI6B,GACF7B,EAAWp5D,KAAK04B,KAAK,KAAKt2B,IAAM64D,CAAYj7D,EAAAA,KAAKqE,MAAM,KAAKpE,IAAMg7D,CAAY,EAAA,EAC1E7B,EAAW,MACb5pD,QAAQC,KAAK,UAAU,KAAKzE,EAAE,oBAAoBiwD,CAAS,kCAAiC7B,CAAAA,2BAAmC,EAC/HA,EAAW,OAGbA,EAAW,KAAK8B,iBAAgB,EAChC7jC,EAAgBA,GAAiB,IAG/BA,IACF+hC,EAAWp5D,KAAKC,IAAIo3B,EAAe+hC,CAAAA,GAG9BA,CACT,CAKA8B,kBAAmB,CACjB,OAAO9vD,OAAOE,iBAChB,CAEAkyB,YAAa,CACX,IAAMz1B,EAAO,KAAKlB,QACZowB,EAAWlvB,EAAK2Q,MAMlB0gD,EAAW,KAAK4B,aAAY,EAChC5B,EAAWp5D,KAAKoC,IAAI,EAAGg3D,CAAAA,EAEvB,IAAM+B,EAA0B,CAC9B/B,SAAAA,EACAlY,OAAQn5C,EAAKm5C,OACbjhD,IAAK8H,EAAK9H,IACVmC,IAAK2F,EAAK3F,IACV+2D,UAAWliC,EAASkiC,UACpB91B,KAAMpM,EAASgkC,SACf/oD,MAAO+kB,EAAS/kB,MAChBmnD,UAAW,KAAKpyB,WAAU,EAC1BxsB,WAAY,KAAKF,aAAY,EAC7BwkB,YAAa9H,EAAS8H,aAAe,EACrCu6B,cAAeriC,EAASqiC,gBAAkB,EAC5C,EACMJ,EAAY,KAAK59B,QAAU,KAC3B5iB,EAAQsgD,GAAcmC,EAAyBjC,CAAAA,EAIrD,OAAInxD,EAAKm5C,SAAW,SAClBka,GAAmB1iD,EAAO,KAAM,OAAA,EAG9B3Q,EAAKC,SACP0Q,EAAM1Q,QAAO,EAEb,KAAK9H,MAAQ,KAAKkC,IAClB,KAAK6F,IAAM,KAAKhI,MAEhB,KAAKC,MAAQ,KAAKD,IAClB,KAAKgI,IAAM,KAAK7F,KAGXsW,CACT,CAKA7S,WAAY,CACV,IAAM6S,EAAQ,KAAKA,MACfxY,EAAQ,KAAKD,IACbgI,EAAM,KAAK7F,IAIf,GAFA,MAAMyD,UAAS,EAEX,KAAKgB,QAAQgV,QAAUnD,EAAM7X,OAAQ,CACvC,IAAMgb,GAAU5T,EAAM/H,GAASF,KAAKoC,IAAIsW,EAAM7X,OAAS,EAAG,CAAK,EAAA,EAC/DX,GAAS2b,EACT5T,GAAO4T,EAET,KAAK+8C,YAAc14D,EACnB,KAAKw6D,UAAYzyD,EACjB,KAAK4wD,YAAc5wD,EAAM/H,CAC3B,CAEA6T,iBAAiBxM,EAAO,CACtB,OAAOsd,GAAatd,EAAO,KAAKnI,MAAMyH,QAAQie,OAAQ,KAAKje,QAAQ6R,MAAMoQ,MAAM,CACjF,CACF,ECnTqBuyC,GAAN,cAA0BZ,EAAAA,CAEvC,OAAOzvD,GAAK,SAKZ,OAAO9E,SAAW,CAChBwS,MAAO,CACLkmB,SAAU08B,GAAMC,WAAWC,OAC7B,GAIFp+B,qBAAsB,CACpB,GAAM,CAACn9B,IAAAA,EAAKmC,IAAAA,CAAG,EAAI,KAAKkR,UAAU,EAAI,EAEtC,KAAKrT,IAAM8J,GAAS9J,CAAAA,EAAOA,EAAM,EACjC,KAAKmC,IAAM2H,GAAS3H,CAAAA,EAAOA,EAAM,EAGjC,KAAKu4D,uBAAsB,CAC7B,CAMAO,kBAAmB,CACjB,IAAMzgD,EAAa,KAAKF,aAAY,EAC9B1Z,EAAS4Z,EAAa,KAAKmC,MAAQ,KAAKD,OACxCoiB,EAAc7b,GAAU,KAAKrc,QAAQ6R,MAAMqmB,WAAW,EACtD9lB,GAASwB,EAAaza,KAAKsgB,IAAIye,CAAAA,EAAe/+B,KAAKogB,IAAI2e,CAAAA,IAAiB,KACxEoC,EAAW,KAAKG,wBAAwB,CAAA,EAC9C,OAAOthC,KAAK04B,KAAK73B,EAASb,KAAKC,IAAI,GAAIkhC,EAAS9G,WAAaphB,CAAAA,CAAAA,CAC/D,CAGAR,iBAAiBlR,EAAO,CACtB,OAAOA,IAAU,KAAO8L,IAAM,KAAKgL,oBAAoB9W,EAAQ,KAAKqxD,aAAe,KAAKC,WAAW,CACrG,CAEAt6C,iBAAiBojB,EAAO,CACtB,OAAO,KAAKi3B,YAAc,KAAK72B,mBAAmBJ,CAAAA,EAAS,KAAKk3B,WAClE,CACF,EC3CM4C,GAAapgD,GAAKrb,KAAKqE,MAAMq3D,GAAMrgD,CAAAA,CAAAA,EACnCsgD,GAAiB,CAACtgD,EAAGugD,IAAM57D,KAAKirB,IAAI,GAAIwwC,GAAWpgD,CAAKugD,EAAAA,CAAAA,EAE9D,SAASC,GAAQC,EAAS,CAExB,OADeA,EAAW97D,KAAKirB,IAAI,GAAIwwC,GAAWK,CAAAA,CAAAA,IAChC,CACpB,CAEA,SAASC,GAAM97D,EAAKmC,EAAK45D,EAAU,CACjC,IAAMC,EAAYj8D,KAAKirB,IAAI,GAAI+wC,CAAAA,EACzB97D,EAAQF,KAAKqE,MAAMpE,EAAMg8D,CAAAA,EAE/B,OADYj8D,KAAK04B,KAAKt2B,EAAM65D,CAAAA,EACf/7D,CACf,CAEA,SAASg8D,GAASj8D,EAAKmC,EAAK,CAC1B,IAAM+Q,EAAQ/Q,EAAMnC,EAChB+7D,EAAWP,GAAWtoD,CAAAA,EAC1B,KAAO4oD,GAAM97D,EAAKmC,EAAK45D,CAAAA,EAAY,IACjCA,IAEF,KAAOD,GAAM97D,EAAKmC,EAAK45D,CAAAA,EAAY,IACjCA,IAEF,OAAOh8D,KAAKC,IAAI+7D,EAAUP,GAAWx7D,CAAAA,CAAAA,CACvC,CASA,SAAS+4D,GAAcC,EAAmB,CAACh5D,IAAAA,EAAKmC,IAAAA,CAAG,EAAG,CACpDnC,EAAMo8B,GAAgB48B,EAAkBh5D,IAAKA,CAAAA,EAC7C,IAAMyY,EAAQ,CAAA,EACRyjD,EAASV,GAAWx7D,CAAAA,EACtBm8D,EAAMF,GAASj8D,EAAKmC,CAAAA,EACpB+2D,EAAYiD,EAAM,EAAIp8D,KAAKirB,IAAI,GAAIjrB,KAAKwY,IAAI4jD,CAAAA,CAAAA,EAAQ,EAClDnB,EAAWj7D,KAAKirB,IAAI,GAAImxC,CAAAA,EACxB1hD,EAAOyhD,EAASC,EAAMp8D,KAAKirB,IAAI,GAAIkxC,CAAAA,EAAU,EAC7Cj8D,EAAQF,KAAKg4B,OAAO/3B,EAAMya,GAAQy+C,CAAaA,EAAAA,EAC/Ct9C,EAAS7b,KAAKqE,OAAOpE,EAAMya,GAAQugD,EAAW,EAAA,EAAMA,EAAW,GACjEoB,EAAcr8D,KAAKqE,OAAOnE,EAAQ2b,GAAU7b,KAAKirB,IAAI,GAAImxC,CAAAA,CAAAA,EACzD70D,EAAQ80B,GAAgB48B,EAAkBh5D,IAAKD,KAAKg4B,OAAOtd,EAAOmB,EAASwgD,EAAcr8D,KAAKirB,IAAI,GAAImxC,CAAAA,GAAQjD,CAAaA,EAAAA,CAAAA,EAC/H,KAAO5xD,EAAQnF,GACbsW,EAAM5W,KAAK,CAACyF,MAAAA,EAAOgwB,MAAOskC,GAAQt0D,CAAAA,EAAQ80D,YAAAA,CAAW,CAAA,EACjDA,GAAe,GACjBA,EAAcA,EAAc,GAAK,GAAK,GAEtCA,IAEEA,GAAe,KACjBD,IACAC,EAAc,EACdlD,EAAYiD,GAAO,EAAI,EAAIjD,GAE7B5xD,EAAQvH,KAAKg4B,OAAOtd,EAAOmB,EAASwgD,EAAcr8D,KAAKirB,IAAI,GAAImxC,CAAAA,GAAQjD,CAAaA,EAAAA,EAEtF,IAAMmD,EAAWjgC,GAAgB48B,EAAkB72D,IAAKmF,CAAAA,EACxDmR,OAAAA,EAAM5W,KAAK,CAACyF,MAAO+0D,EAAU/kC,MAAOskC,GAAQS,CAAAA,EAAWD,YAAAA,CAAW,CAAA,EAE3D3jD,CACT,CAEe,IAAM6jD,GAAN,cAA+BxhC,EAAAA,CAE5C,OAAO/vB,GAAK,cAKZ,OAAO9E,SAAW,CAChBwS,MAAO,CACLkmB,SAAU08B,GAAMC,WAAWiB,YAC3BjlC,MAAO,CACLC,QAAS,EACX,CACF,GAIF54B,YAAY8E,EAAK,CACf,MAAMA,CAAAA,EAGN,KAAKxD,MAAQhB,OAEb,KAAK+I,IAAM/I,OAEX,KAAK05D,YAAc15D,OACnB,KAAK25D,YAAc,CACrB,CAEA5mD,MAAM3E,EAAKhE,EAAO,CAChB,IAAM/B,EAAQkzD,GAAgB9xC,UAAU1W,MAAM+9C,MAAM,KAAM,CAAC1iD,EAAKhE,CAAM,CAAA,EACtE,GAAI/B,IAAU,EAAG,CACf,KAAKk1D,MAAQ,GACb,OAEF,OAAO1yD,GAASxC,CAAAA,GAAUA,EAAQ,EAAIA,EAAQ,IAChD,CAEA61B,qBAAsB,CACpB,GAAM,CAACn9B,IAAAA,EAAKmC,IAAAA,CAAG,EAAI,KAAKkR,UAAU,EAAI,EAEtC,KAAKrT,IAAM8J,GAAS9J,CAAAA,EAAOD,KAAKoC,IAAI,EAAGnC,CAAAA,EAAO,KAC9C,KAAKmC,IAAM2H,GAAS3H,CAAAA,EAAOpC,KAAKoC,IAAI,EAAGA,CAAAA,EAAO,KAE1C,KAAKyE,QAAQmV,cACf,KAAKygD,MAAQ,IAKX,KAAKA,OAAS,KAAKx8D,MAAQ,KAAK67B,eAAiB,CAAC/xB,GAAS,KAAK6xB,QAAQ,IAC1E,KAAK37B,IAAMA,IAAQ07D,GAAe,KAAK17D,IAAK,CAAK07D,EAAAA,GAAe,KAAK17D,IAAK,EAAC,EAAK07D,GAAe,KAAK17D,IAAK,CAAE,GAG7G,KAAK06D,uBAAsB,CAC7B,CAEAA,wBAAyB,CACvB,GAAM,CAACzvD,WAAAA,EAAYC,WAAAA,CAAAA,EAAc,KAAKF,cAAa,EAC/ChL,EAAM,KAAKA,IACXmC,EAAM,KAAKA,IAETw4D,EAASv/C,GAAMpb,EAAMiL,EAAajL,EAAMob,EACxCw/C,EAASx/C,GAAMjZ,EAAM+I,EAAa/I,EAAMiZ,EAE1Cpb,IAAQmC,IACNnC,GAAO,GACT26D,EAAO,CAAA,EACPC,EAAO,EAAA,IAEPD,EAAOe,GAAe17D,EAAK,EAAC,CAAA,EAC5B46D,EAAOc,GAAev5D,EAAK,CAAC,CAAA,IAG5BnC,GAAO,GACT26D,EAAOe,GAAev5D,EAAK,EAAC,CAAA,EAE1BA,GAAO,GAETy4D,EAAOc,GAAe17D,EAAK,CAAC,CAAA,EAG9B,KAAKA,IAAMA,EACX,KAAKmC,IAAMA,CACb,CAEAo7B,YAAa,CACX,IAAMz1B,EAAO,KAAKlB,QAEZoyD,EAAoB,CACxBh5D,IAAK,KAAK27B,SACVx5B,IAAK,KAAKu5B,QACZ,EACMjjB,EAAQsgD,GAAcC,EAAmB,IAAI,EAInD,OAAIlxD,EAAKm5C,SAAW,SAClBka,GAAmB1iD,EAAO,KAAM,OAAA,EAG9B3Q,EAAKC,SACP0Q,EAAM1Q,QAAO,EAEb,KAAK9H,MAAQ,KAAKkC,IAClB,KAAK6F,IAAM,KAAKhI,MAEhB,KAAKC,MAAQ,KAAKD,IAClB,KAAKgI,IAAM,KAAK7F,KAGXsW,CACT,CAMA3E,iBAAiBxM,EAAO,CACtB,OAAOA,IAAUrI,OACb,IACA2lB,GAAatd,EAAO,KAAKnI,MAAMyH,QAAQie,OAAQ,KAAKje,QAAQ6R,MAAMoQ,MAAM,CAC9E,CAKAjjB,WAAY,CACV,IAAM3F,EAAQ,KAAKD,IAEnB,MAAM4F,UAAS,EAEf,KAAK+yD,YAAc8C,GAAMx7D,CAAAA,EACzB,KAAK24D,YAAc6C,GAAM,KAAKt5D,GAAG,EAAIs5D,GAAMx7D,CAAAA,CAC7C,CAEAuY,iBAAiBlR,EAAO,CAItB,OAHIA,IAAUrI,QAAaqI,IAAU,KACnCA,EAAQ,KAAKtH,KAEXsH,IAAU,MAAQ6V,MAAM7V,CAAQ,EAC3B8L,IAEF,KAAKgL,mBAAmB9W,IAAU,KAAKtH,IAC1C,GACCy7D,GAAMn0D,CAAAA,EAAS,KAAKqxD,aAAe,KAAKC,WAAW,CAC1D,CAEAt6C,iBAAiBojB,EAAO,CACtB,IAAMC,EAAU,KAAKG,mBAAmBJ,CAAAA,EACxC,OAAO3hC,KAAKirB,IAAI,GAAI,KAAK2tC,YAAch3B,EAAU,KAAKi3B,WAAW,CACnE,CACF,ECzNA,SAAS6D,GAAsB30D,EAAM,CACnC,IAAMkvB,EAAWlvB,EAAK2Q,MAEtB,GAAIue,EAASrQ,SAAW7e,EAAK6e,QAAS,CACpC,IAAM2J,EAAUO,GAAUmG,EAASkO,eAAe,EAClD,OAAOp1B,GAAeknB,EAASkD,MAAQlD,EAASkD,KAAK3yB,KAAMtB,GAASi0B,KAAK3yB,IAAI,EAAI+oB,EAAQ5T,OAE3F,MAAO,EACT,CAEA,SAASggD,GAAiBtuD,EAAK8rB,EAAMrmB,EAAO,CAC1CA,OAAAA,EAAQtN,GAAQsN,CAAAA,EAASA,EAAQ,CAACA,CAAM,EACjC,CACLsb,EAAGwtC,GAAavuD,EAAK8rB,EAAKoH,OAAQztB,CAAAA,EAClCwb,EAAGxb,EAAMjT,OAASs5B,EAAKE,UACzB,CACF,CAEA,SAASwiC,GAAgBn8C,EAAOkM,EAAKplB,EAAMvH,EAAKmC,EAAK,CACnD,OAAIse,IAAUzgB,GAAOygB,IAAUte,EACtB,CACLlC,MAAO0sB,EAAOplB,EAAO,EACrBS,IAAK2kB,EAAOplB,EAAO,CACrB,EACSkZ,EAAQzgB,GAAOygB,EAAQte,EACzB,CACLlC,MAAO0sB,EAAMplB,EACbS,IAAK2kB,CACP,EAGK,CACL1sB,MAAO0sB,EACP3kB,IAAK2kB,EAAMplB,CACb,CACF,CAKA,SAASs1D,GAAmBj1D,EAAO,CA8BjC,IAAMqT,EAAO,CACXnS,EAAGlB,EAAMa,KAAOb,EAAMinD,SAASpmD,KAC/BG,EAAGhB,EAAMW,MAAQX,EAAMinD,SAAStmD,MAChCI,EAAGf,EAAMU,IAAMV,EAAMinD,SAASvmD,IAC9BO,EAAGjB,EAAMY,OAASZ,EAAMinD,SAASrmD,MACnC,EACMs0D,EAAS/2D,OAAOyB,OAAO,CAAA,EAAIyT,CAAAA,EAC3BkkB,EAAa,CAAA,EACb7O,EAAU,CAAA,EACVysC,EAAan1D,EAAMo1D,aAAap8D,OAChCq8D,EAAiBr1D,EAAMhB,QAAQigB,YAC/Bq2C,EAAkBD,EAAeE,kBAAoBn8C,GAAK+7C,EAAa,EAE7E,QAASl8D,EAAI,EAAGA,EAAIk8D,EAAYl8D,IAAK,CACnC,IAAMiH,EAAOm1D,EAAehhC,WAAWr0B,EAAMw1D,qBAAqBv8D,CAAAA,CAAAA,EAClEyvB,EAAQzvB,CAAAA,EAAKiH,EAAKwoB,QAClB,IAAMvI,EAAgBngB,EAAMy1D,iBAAiBx8D,EAAG+G,EAAM01D,YAAchtC,EAAQzvB,CAAAA,EAAIq8D,CAAAA,EAC1EK,EAASpjC,GAAOryB,EAAKoyB,IAAI,EACzB40B,EAAW4N,GAAiB90D,EAAMwG,IAAKmvD,EAAQ31D,EAAMo1D,aAAan8D,CAAE,CAAA,EAC1Es+B,EAAWt+B,CAAAA,EAAKiuD,EAEhB,IAAM7uB,EAAeiY,GAAgBtwC,EAAM2f,cAAc1mB,CAAKq8D,EAAAA,CAAAA,EACxDz8C,EAAQ1gB,KAAKg4B,MAAM4H,GAAUM,CAAAA,CAAAA,EAC7Bu9B,EAAUZ,GAAgBn8C,EAAOsH,EAAc3f,EAAG0mD,EAAS3/B,EAAG,EAAG,GAAA,EACjEsuC,EAAUb,GAAgBn8C,EAAOsH,EAAc1f,EAAGymD,EAASz/B,EAAG,GAAI,GAAA,EACxEquC,GAAaZ,EAAQ7hD,EAAMglB,EAAcu9B,EAASC,CAAAA,CACpD,CAEA71D,EAAM+1D,eACJ1iD,EAAKnS,EAAIg0D,EAAOh0D,EAChBg0D,EAAOl0D,EAAIqS,EAAKrS,EAChBqS,EAAKtS,EAAIm0D,EAAOn0D,EAChBm0D,EAAOj0D,EAAIoS,EAAKpS,CAAC,EAInBjB,EAAMg2D,iBAAmBC,GAAqBj2D,EAAOu3B,EAAY7O,CAAAA,CACnE,CAEA,SAASotC,GAAaZ,EAAQ7hD,EAAMwF,EAAO+8C,EAASC,EAAS,CAC3D,IAAMp9C,EAAMtgB,KAAKwY,IAAIxY,KAAKsgB,IAAII,CAAAA,CAAAA,EACxBN,EAAMpgB,KAAKwY,IAAIxY,KAAKogB,IAAIM,CAAAA,CAAAA,EAC1BrY,EAAI,EACJC,EAAI,EACJm1D,EAAQv9D,MAAQgb,EAAKnS,GACvBV,GAAK6S,EAAKnS,EAAI00D,EAAQv9D,OAASogB,EAC/By8C,EAAOh0D,EAAI/I,KAAKC,IAAI88D,EAAOh0D,EAAGmS,EAAKnS,EAAIV,CAAAA,GAC9Bo1D,EAAQx1D,IAAMiT,EAAKrS,IAC5BR,GAAKo1D,EAAQx1D,IAAMiT,EAAKrS,GAAKyX,EAC7By8C,EAAOl0D,EAAI7I,KAAKoC,IAAI26D,EAAOl0D,EAAGqS,EAAKrS,EAAIR,CAAAA,GAErCq1D,EAAQx9D,MAAQgb,EAAKtS,GACvBN,GAAK4S,EAAKtS,EAAI80D,EAAQx9D,OAASkgB,EAC/B28C,EAAOn0D,EAAI5I,KAAKC,IAAI88D,EAAOn0D,EAAGsS,EAAKtS,EAAIN,CAAAA,GAC9Bo1D,EAAQz1D,IAAMiT,EAAKpS,IAC5BR,GAAKo1D,EAAQz1D,IAAMiT,EAAKpS,GAAKsX,EAC7B28C,EAAOj0D,EAAI9I,KAAKoC,IAAI26D,EAAOj0D,EAAGoS,EAAKpS,EAAIR,CAAAA,EAE3C,CAEA,SAASy1D,GAAqBl2D,EAAOyB,EAAO00D,EAAU,CACpD,IAAMC,EAAgBp2D,EAAM01D,YACtB,CAACW,MAAAA,EAAOf,gBAAAA,EAAiB5sC,QAAAA,EAAS/oB,KAAAA,CAAI,EAAIw2D,EAC1CG,EAAqBt2D,EAAMy1D,iBAAiBh0D,EAAO20D,EAAgBC,EAAQ3tC,EAAS4sC,CAAAA,EACpFz8C,EAAQ1gB,KAAKg4B,MAAM4H,GAAUuY,GAAgBgmB,EAAmBz9C,MAAQK,EAAAA,CAAAA,CAAAA,EACxEzY,EAAI81D,GAAUD,EAAmB71D,EAAGd,EAAK8nB,EAAG5O,CAAAA,EAC5CyjB,EAAYk6B,GAAqB39C,CAAAA,EACjChY,EAAO41D,GAAiBH,EAAmB91D,EAAGb,EAAK4nB,EAAG+U,CAAAA,EAC5D,MAAO,CAEL+P,QAAS,GAGT7rC,EAAG81D,EAAmB91D,EACtBC,EAAAA,EAGA67B,UAAAA,EAGAz7B,KAAAA,EACAH,IAAKD,EACLE,MAAOE,EAAOlB,EAAK4nB,EACnB3mB,OAAQH,EAAId,EAAK8nB,CACnB,CACF,CAEA,SAASivC,GAAgBv9D,EAAMmT,EAAM,CACnC,GAAI,CAACA,EACH,MAAO,GAET,GAAM,CAACzL,KAAAA,EAAMH,IAAAA,EAAKC,MAAAA,EAAOC,OAAAA,CAAM,EAAIzH,EAGnC,MAAO,EAFcsqB,GAAe,CAACjjB,EAAGK,EAAMJ,EAAGC,CAAG,EAAG4L,CAAAA,GAASmX,GAAe,CAACjjB,EAAGK,EAAMJ,EAAGG,CAAM,EAAG0L,CAAAA,GACnGmX,GAAe,CAACjjB,EAAGG,EAAOF,EAAGC,CAAG,EAAG4L,CAAAA,GAASmX,GAAe,CAACjjB,EAAGG,EAAOF,EAAGG,GAAS0L,CAAAA,EAEtF,CAEA,SAAS2pD,GAAqBj2D,EAAOu3B,EAAY7O,EAAS,CACxD,IAAM3vB,EAAQ,CAAA,EACRo8D,EAAan1D,EAAMo1D,aAAap8D,OAChCkH,EAAOF,EAAMhB,QACb,CAACu2D,kBAAAA,EAAmBx2C,QAAAA,CAAAA,EAAW7e,EAAK+e,YACpCk3C,EAAW,CACfE,MAAOxB,GAAsB30D,CAAQ,EAAA,EACrCo1D,gBAAiBC,EAAoBn8C,GAAK+7C,EAAa,CACzD,EACI7oD,EAEJ,QAASrT,EAAI,EAAGA,EAAIk8D,EAAYl8D,IAAK,CACnCk9D,EAASztC,QAAUA,EAAQzvB,CAAE,EAC7Bk9D,EAASx2D,KAAO43B,EAAWt+B,CAAE,EAE7B,IAAME,EAAO+8D,GAAqBl2D,EAAO/G,EAAGk9D,CAAAA,EAC5Cp9D,EAAMkB,KAAKd,CAAAA,EACP4lB,IAAY,SACd5lB,EAAKkzC,QAAUqqB,GAAgBv9D,EAAMmT,CAAAA,EACjCnT,EAAKkzC,UACP//B,EAAOnT,GAGb,CACA,OAAOJ,CACT,CAEA,SAASy9D,GAAqB39C,EAAO,CACnC,OAAIA,IAAU,GAAKA,IAAU,IACpB,SACEA,EAAQ,IACV,OAGF,OACT,CAEA,SAAS49C,GAAiBj2D,EAAG+mB,EAAG2J,EAAO,CACrC,OAAIA,IAAU,QACZ1wB,GAAK+mB,EACI2J,IAAU,WACnB1wB,GAAM+mB,EAAI,GAEL/mB,CACT,CAEA,SAAS+1D,GAAU91D,EAAGgnB,EAAG5O,EAAO,CAC9B,OAAIA,IAAU,IAAMA,IAAU,IAC5BpY,GAAMgnB,EAAI,GACD5O,EAAQ,KAAOA,EAAQ,MAChCpY,GAAKgnB,GAEAhnB,CACT,CAEA,SAASk2D,GAAkBnwD,EAAKtG,EAAM/G,EAAM,CAC1C,GAAM,CAAC0H,KAAAA,EAAMH,IAAAA,EAAKC,MAAAA,EAAOC,OAAAA,CAAM,EAAIzH,EAC7B,CAACokC,cAAAA,CAAa,EAAIr9B,EAExB,GAAI,CAACmR,GAAcksB,CAAgB,EAAA,CACjC,IAAM4T,EAAe0H,GAAc34C,EAAKixC,YAAY,EAC9CzoB,EAAUO,GAAU/oB,EAAKo9B,eAAe,EAC9C92B,EAAI8T,UAAYijB,EAEhB,IAAMq5B,EAAe/1D,EAAO6nB,EAAQ7nB,KAC9Bg2D,EAAcn2D,EAAMgoB,EAAQhoB,IAC5Bo2D,EAAgBn2D,EAAQE,EAAO6nB,EAAQ3T,MACvCgiD,EAAiBn2D,EAASF,EAAMgoB,EAAQ5T,OAE1C3W,OAAOW,OAAOqyC,CAAAA,EAAc1N,KAAKjwB,GAAKA,IAAM,CAAI,GAClDhN,EAAI43B,UAAS,EACb4b,GAAmBxzC,EAAK,CACtBhG,EAAGo2D,EACHn2D,EAAGo2D,EACHtvC,EAAGuvC,EACHrvC,EAAGsvC,EACH1/C,OAAQ85B,CACV,CAAA,EACA3qC,EAAIiB,KAAI,GAERjB,EAAIo3B,SAASg5B,EAAcC,EAAaC,EAAeC,CAAAA,EAG7D,CAEA,SAASC,GAAgBh3D,EAAO0rD,EAAY,CAC1C,GAAM,CAACllD,IAAAA,EAAKxH,QAAS,CAACigB,YAAAA,CAAW,CAAC,EAAIjf,EAEtC,QAAS/G,EAAIyyD,EAAa,EAAGzyD,GAAK,EAAGA,IAAK,CACxC,IAAME,EAAO6G,EAAMg2D,iBAAiB/8D,CAAE,EACtC,GAAI,CAACE,EAAKkzC,QAER,SAEF,IAAM5Q,EAAcxc,EAAYoV,WAAWr0B,EAAMw1D,qBAAqBv8D,CAAAA,CAAAA,EACtE09D,GAAkBnwD,EAAKi1B,EAAatiC,CAAAA,EACpC,IAAMw8D,EAASpjC,GAAOkJ,EAAYnJ,IAAI,EAChC,CAAC9xB,EAAAA,EAAGC,EAAAA,EAAG67B,UAAAA,CAAAA,EAAanjC,EAE1B2lC,GACEt4B,EACAxG,EAAMo1D,aAAan8D,CAAE,EACrBuH,EACAC,EAAKk1D,EAAOnjC,WAAa,EACzBmjC,EACA,CACEv6D,MAAOqgC,EAAYrgC,MACnBkhC,UAAWA,EACXG,aAAc,QAChB,CAAA,CAEJ,CACF,CAEA,SAASw6B,GAAej3D,EAAOqX,EAAQ2H,EAAU0sC,EAAY,CAC3D,GAAM,CAACllD,IAAAA,CAAG,EAAIxG,EACd,GAAIgf,EAEFxY,EAAIsW,IAAI9c,EAAMwf,QAASxf,EAAMyf,QAASpI,EAAQ,EAAGc,EAAAA,MAC5C,CAEL,IAAIgI,EAAgBngB,EAAMy1D,iBAAiB,EAAGp+C,CAAAA,EAC9C7Q,EAAI63B,OAAOle,EAAc3f,EAAG2f,EAAc1f,CAAC,EAE3C,QAASxH,EAAI,EAAGA,EAAIyyD,EAAYzyD,IAC9BknB,EAAgBngB,EAAMy1D,iBAAiBx8D,EAAGoe,CAAAA,EAC1C7Q,EAAI83B,OAAOne,EAAc3f,EAAG2f,EAAc1f,CAAC,EAGjD,CAEA,SAASy2D,GAAel3D,EAAOm3D,EAAc9/C,EAAQq0C,EAAYjxB,EAAY,CAC3E,IAAMj0B,EAAMxG,EAAMwG,IACZwY,EAAWm4C,EAAan4C,SAExB,CAAC5jB,MAAAA,EAAOuf,UAAAA,CAAAA,EAAaw8C,EAEtB,CAACn4C,GAAY,CAAC0sC,GAAe,CAACtwD,GAAS,CAACuf,GAAatD,EAAS,IAInE7Q,EAAIm3B,KAAI,EACRn3B,EAAIgU,YAAcpf,EAClBoL,EAAImU,UAAYA,EAChBnU,EAAI03B,YAAYzD,EAAWoB,MAAQ,CAAA,CAAE,EACrCr1B,EAAI23B,eAAiB1D,EAAWsB,WAEhCv1B,EAAI43B,UAAS,EACb64B,GAAej3D,EAAOqX,EAAQ2H,EAAU0sC,CAAAA,EACxCllD,EAAIiqC,UAAS,EACbjqC,EAAI+3B,OAAM,EACV/3B,EAAIq3B,QAAO,EACb,CAEA,SAASu5B,GAAwBjyD,EAAQ1D,EAAOwK,EAAO,CACrD,OAAO7G,GAAcD,EAAQ,CAC3B8G,MAAAA,EACAxK,MAAAA,EACA/J,KAAM,YACR,CAAA,CACF,CAEe,IAAM2/D,GAAN,cAAgCzE,EAAAA,CAE7C,OAAOzvD,GAAK,eAKZ,OAAO9E,SAAW,CAChB0gB,QAAS,GAGTu4C,QAAS,GACT90C,SAAU,YAEV1D,WAAY,CACVC,QAAS,GACTpE,UAAW,EACXihB,WAAY,CAAA,EACZE,iBAAkB,CACpB,EAEA7nB,KAAM,CACJ+K,SAAU,EACZ,EAEA5G,WAAY,EAGZvH,MAAO,CAELssB,kBAAmB,GAEnBpG,SAAU08B,GAAMC,WAAWC,OAC7B,EAEA10C,YAAa,CACXse,cAAelmC,OAGfimC,gBAAiB,EAGjBve,QAAS,GAGTuT,KAAM,CACJ3yB,KAAM,EACR,EAGAo3B,SAAS9qB,EAAO,CACd,OAAOA,CACT,EAGAyc,QAAS,EAGT6sC,kBAAmB,EACrB,GAGF,OAAOzmC,cAAgB,CACrB,mBAAoB,cACpB,oBAAqB,QACrB,cAAe,SAGjB,OAAOpV,YAAc,CACnBoF,WAAY,CACV0xC,UAAW,MACb,GAGFz5D,YAAY8E,EAAK,CACf,MAAMA,CAAAA,EAGN,KAAK2jB,QAAUnoB,OAEf,KAAKooB,QAAUpoB,OAEf,KAAKq+D,YAAcr+D,OAEnB,KAAK+9D,aAAe,CAAA,EACpB,KAAKY,iBAAmB,CAAA,CAC1B,CAEA5gC,eAAgB,CAEd,IAAM1M,EAAU,KAAKu+B,SAAWh+B,GAAU4rC,GAAsB,KAAK71D,OAAO,EAAI,CAAA,EAC1EuoB,EAAI,KAAKxS,MAAQ,KAAKiH,SAAW0M,EAAQ3T,MACzC0S,EAAI,KAAK3S,OAAS,KAAKmH,UAAYyM,EAAQ5T,OACjD,KAAK0K,QAAUrnB,KAAKqE,MAAM,KAAKqE,KAAO0mB,EAAI,EAAImB,EAAQ7nB,IAAI,EAC1D,KAAK4e,QAAUtnB,KAAKqE,MAAM,KAAKkE,IAAM+mB,EAAI,EAAIiB,EAAQhoB,GAAG,EACxD,KAAKg1D,YAAcv9D,KAAKqE,MAAMrE,KAAKC,IAAImvB,EAAGE,CAAK,EAAA,CAAA,CACjD,CAEA8N,qBAAsB,CACpB,GAAM,CAACn9B,IAAAA,EAAKmC,IAAAA,CAAG,EAAI,KAAKkR,UAAU,EAAK,EAEvC,KAAKrT,IAAM8J,GAAS9J,CAAAA,GAAQ,CAACmd,MAAMnd,CAAOA,EAAAA,EAAM,EAChD,KAAKmC,IAAM2H,GAAS3H,CAAAA,GAAQ,CAACgb,MAAMhb,CAAOA,EAAAA,EAAM,EAGhD,KAAKu4D,uBAAsB,CAC7B,CAMAO,kBAAmB,CACjB,OAAOl7D,KAAK04B,KAAK,KAAK6kC,YAAcb,GAAsB,KAAK71D,OAAO,CAAA,CACxE,CAEA83B,mBAAmBjmB,EAAO,CACxB+hD,GAAgB9xC,UAAUgW,mBAAmBt+B,KAAK,KAAMqY,CAAAA,EAGxD,KAAKukD,aAAe,KAAKtqD,UAAS,EAC/BqP,IAAI,CAACza,EAAO+B,IAAU,CACrB,IAAMwK,EAAQg3B,GAAa,KAAKjkC,QAAQigB,YAAY8X,SAAU,CAACr3B,EAAO+B,CAAM,EAAE,IAAI,EAClF,OAAOwK,GAASA,IAAU,EAAIA,EAAQ,GAEvCjH,EAAAA,OAAO,CAACwO,EAAGva,IAAM,KAAK1B,MAAM+e,kBAAkBrd,CAAAA,CAAAA,CACnD,CAEAo9B,KAAM,CACJ,IAAMn2B,EAAO,KAAKlB,QAEdkB,EAAK6e,SAAW7e,EAAK+e,YAAYF,QACnCk2C,GAAmB,IAAI,EAEvB,KAAKc,eAAe,EAAG,EAAG,EAAG,CAAA,CAEjC,CAEAA,eAAewB,EAAcC,EAAeC,EAAaC,EAAgB,CACvE,KAAKl4C,SAAWrnB,KAAKqE,OAAO+6D,EAAeC,GAAiB,CAAA,EAC5D,KAAK/3C,SAAWtnB,KAAKqE,OAAOi7D,EAAcC,GAAkB,CAAA,EAC5D,KAAKhC,aAAev9D,KAAKC,IAAI,KAAKs9D,YAAc,EAAGv9D,KAAKoC,IAAIg9D,EAAcC,EAAeC,EAAaC,CAAAA,CAAAA,CACxG,CAEA/3C,cAAcle,EAAO,CACnB,IAAMk2D,EAAkBx/C,IAAO,KAAKi9C,aAAap8D,QAAU,GACrDof,EAAa,KAAKpZ,QAAQoZ,YAAc,EAE9C,OAAOk4B,GAAgB7uC,EAAQk2D,EAAkBt8C,GAAUjD,CAAAA,CAAAA,CAC7D,CAEA2H,8BAA8BrgB,EAAO,CACnC,GAAI2R,GAAc3R,CAAQ,EACxB,MAAO8L,KAIT,IAAMosD,EAAgB,KAAKlC,aAAe,KAAKn7D,IAAM,KAAKnC,KAC1D,OAAI,KAAK4G,QAAQmB,SACP,KAAK5F,IAAMmF,GAASk4D,GAEtBl4D,EAAQ,KAAKtH,KAAOw/D,CAC9B,CAEAC,8BAA8B1zC,EAAU,CACtC,GAAI9S,GAAc8S,CAAW,EAC3B,MAAO3Y,KAGT,IAAMssD,EAAiB3zC,GAAY,KAAKuxC,aAAe,KAAKn7D,IAAM,KAAKnC,MACvE,OAAO,KAAK4G,QAAQmB,QAAU,KAAK5F,IAAMu9D,EAAiB,KAAK1/D,IAAM0/D,CACvE,CAEAtC,qBAAqB/zD,EAAO,CAC1B,IAAMwd,EAAc,KAAKm2C,cAAgB,CAAA,EAEzC,GAAI3zD,GAAS,GAAKA,EAAQwd,EAAYjmB,OAAQ,CAC5C,IAAM++D,EAAa94C,EAAYxd,CAAM,EACrC,OAAO21D,GAAwB,KAAKltD,WAAU,EAAIzI,EAAOs2D,CAAAA,EAE7D,CAEAtC,iBAAiBh0D,EAAOu2D,EAAoB1C,EAAkB,EAAG,CAC/D,IAAMz8C,EAAQ,KAAK8G,cAAcle,CAAAA,EAASyX,GAAUo8C,EACpD,MAAO,CACL90D,EAAGrI,KAAKogB,IAAIM,CAAAA,EAASm/C,EAAqB,KAAKx4C,QAC/C/e,EAAGtI,KAAKsgB,IAAII,CAAAA,EAASm/C,EAAqB,KAAKv4C,QAC/C5G,MAAAA,CACF,CACF,CAEAuH,yBAAyB3e,EAAO/B,EAAO,CACrC,OAAO,KAAK+1D,iBAAiBh0D,EAAO,KAAKse,8BAA8BrgB,CAAAA,CAAAA,CACzE,CAEAu4D,gBAAgBx2D,EAAO,CACrB,OAAO,KAAK2e,yBAAyB3e,GAAS,EAAG,KAAK04B,aAAY,CAAA,CACpE,CAEA+9B,sBAAsBz2D,EAAO,CAC3B,GAAM,CAACZ,KAAAA,EAAMH,IAAAA,EAAKC,MAAAA,EAAOC,OAAAA,CAAM,EAAI,KAAKo1D,iBAAiBv0D,CAAM,EAC/D,MAAO,CACLZ,KAAAA,EACAH,IAAAA,EACAC,MAAAA,EACAC,OAAAA,CACF,CACF,CAKA88B,gBAAiB,CACf,GAAM,CAACnjB,gBAAAA,EAAiBtG,KAAM,CAAC+K,SAAAA,CAAAA,CAAS,EAAI,KAAKhgB,QACjD,GAAIub,EAAiB,CACnB,IAAM/T,EAAM,KAAKA,IACjBA,EAAIm3B,KAAI,EACRn3B,EAAI43B,UAAS,EACb64B,GAAe,KAAM,KAAKl3C,8BAA8B,KAAK8yC,SAAS,EAAG7zC,EAAU,KAAKo2C,aAAap8D,MAAM,EAC3GwN,EAAIiqC,UAAS,EACbjqC,EAAI8T,UAAYC,EAChB/T,EAAIiB,KAAI,EACRjB,EAAIq3B,QAAO,EAEf,CAKAC,UAAW,CACT,IAAMt3B,EAAM,KAAKA,IACXtG,EAAO,KAAKlB,QACZ,CAAC8f,WAAAA,EAAY7K,KAAAA,EAAMwK,OAAAA,CAAAA,EAAUve,EAC7BwrD,EAAa,KAAK0J,aAAap8D,OAEjCC,EAAG+a,EAAQwO,EAmBf,GAjBItiB,EAAK+e,YAAYF,SACnBi4C,GAAgB,KAAMtL,CAAAA,EAGpBz3C,EAAK8K,SACP,KAAKlO,MAAM9Y,QAAQ,CAACuB,EAAMmI,IAAU,CAClC,GAAIA,IAAU,GAAMA,IAAU,GAAK,KAAKrJ,IAAM,EAAI,CAChD4b,EAAS,KAAK+L,8BAA8BzmB,EAAKoG,KAAK,EACtD,IAAMkN,EAAU,KAAK1C,WAAWzI,CAAAA,EAC1Bg6B,EAAcxnB,EAAKogB,WAAWznB,CAAAA,EAC9B8uB,EAAoBjd,EAAO4V,WAAWznB,CAAAA,EAE5CsqD,GAAe,KAAMz7B,EAAaznB,EAAQ03C,EAAYhwB,CAAAA,EAE1D,CAAA,EAGE5c,EAAWC,QAAS,CAGtB,IAFAvY,EAAIm3B,KAAI,EAEH1kC,EAAIyyD,EAAa,EAAGzyD,GAAK,EAAGA,IAAK,CACpC,IAAMwiC,EAAc3c,EAAWuV,WAAW,KAAKmhC,qBAAqBv8D,CAAAA,CAAAA,EAC9D,CAACmC,MAAAA,EAAOuf,UAAAA,CAAAA,EAAa8gB,EAEvB,CAAC9gB,GAAa,CAACvf,IAInBoL,EAAImU,UAAYA,EAChBnU,EAAIgU,YAAcpf,EAElBoL,EAAI03B,YAAYzC,EAAYG,UAAU,EACtCp1B,EAAI23B,eAAiB1C,EAAYK,iBAEjC9nB,EAAS,KAAK+L,8BAA8B7f,EAAKC,QAAU,KAAK/H,IAAM,KAAKmC,GAAG,EAC9EioB,EAAW,KAAKizC,iBAAiBx8D,EAAG+a,CAAAA,EACpCxN,EAAI43B,UAAS,EACb53B,EAAI63B,OAAO,KAAK7e,QAAS,KAAKC,OAAO,EACrCjZ,EAAI83B,OAAO9b,EAAShiB,EAAGgiB,EAAS/hB,CAAC,EACjC+F,EAAI+3B,OAAM,EACZ,CAEA/3B,EAAIq3B,QAAO,EAEf,CAKAY,YAAa,CAAA,CAKbE,YAAa,CACX,IAAMn4B,EAAM,KAAKA,IACXtG,EAAO,KAAKlB,QACZowB,EAAWlvB,EAAK2Q,MAEtB,GAAI,CAACue,EAASrQ,QACZ,OAGF,IAAM3G,EAAa,KAAKuH,cAAc,CAAA,EAClC3L,EAAQe,EAEZvO,EAAIm3B,KAAI,EACRn3B,EAAIguC,UAAU,KAAKh1B,QAAS,KAAKC,OAAO,EACxCjZ,EAAI2xD,OAAO//C,CAAAA,EACX5R,EAAI81B,UAAY,SAChB91B,EAAIi2B,aAAe,SAEnB,KAAK5rB,MAAM9Y,QAAQ,CAACuB,EAAMmI,IAAU,CAClC,GAAKA,IAAU,GAAK,KAAKrJ,KAAO,GAAM,CAAC8H,EAAKC,QAC1C,OAGF,IAAMs7B,EAAcrM,EAASiF,WAAW,KAAKnqB,WAAWzI,CAAAA,CAAAA,EAClD63B,EAAW/G,GAAOkJ,EAAYnJ,IAAI,EAGxC,GAFAte,EAAS,KAAK+L,8BAA8B,KAAKlP,MAAMpP,CAAM,EAAC/B,KAAK,EAE/D+7B,EAAY0B,kBAAmB,CACjC32B,EAAI8rB,KAAOgH,EAASI,OACpB3kB,EAAQvO,EAAIg9C,YAAYlqD,EAAK2S,KAAK,EAAE8I,MACpCvO,EAAI8T,UAAYmhB,EAAY8B,cAE5B,IAAM7U,EAAUO,GAAUwS,EAAY6B,eAAe,EACrD92B,EAAIo3B,SACF,CAAC7oB,EAAQ,EAAI2T,EAAQ7nB,KACrB,CAACmT,EAASslB,EAAS35B,KAAO,EAAI+oB,EAAQhoB,IACtCqU,EAAQ2T,EAAQ3T,MAChBukB,EAAS35B,KAAO+oB,EAAQ5T,MAAM,EAIlCgqB,GAAWt4B,EAAKlN,EAAK2S,MAAO,EAAG,CAAC+H,EAAQslB,EAAU,CAChDl+B,MAAOqgC,EAAYrgC,MACnB0hC,YAAarB,EAAYsB,gBACzBC,YAAavB,EAAYwB,eAC3B,CAAA,CACF,CAAA,EAEAz2B,EAAIq3B,QAAO,CACb,CAKAmB,WAAY,CAAA,CACd,EC5pBMo5B,GAAY,CAChBC,YAAa,CAACC,OAAQ,GAAM34D,KAAM,EAAGu0D,MAAO,GAAI,EAChDqE,OAAQ,CAACD,OAAQ,GAAM34D,KAAM,IAAMu0D,MAAO,EAAE,EAC5CsE,OAAQ,CAACF,OAAQ,GAAM34D,KAAM,IAAOu0D,MAAO,EAAE,EAC7CuE,KAAM,CAACH,OAAQ,GAAM34D,KAAM,KAASu0D,MAAO,EAAE,EAC7CwE,IAAK,CAACJ,OAAQ,GAAM34D,KAAM,MAAUu0D,MAAO,EAAE,EAC7CyE,KAAM,CAACL,OAAQ,GAAO34D,KAAM,OAAWu0D,MAAO,CAAC,EAC/C0E,MAAO,CAACN,OAAQ,GAAM34D,KAAM,OAASu0D,MAAO,EAAE,EAC9C2E,QAAS,CAACP,OAAQ,GAAO34D,KAAM,OAASu0D,MAAO,CAAC,EAChD4E,KAAM,CAACR,OAAQ,GAAM34D,KAAM,MAAQ,CACrC,EAKMo5D,GAA6C56D,OAAOC,KAAKg6D,EAAAA,EAM/D,SAASY,GAAO1oD,EAAGrP,EAAG,CACpB,OAAOqP,EAAIrP,CACb,CAOA,SAASmJ,GAAMpK,EAAOi5D,EAAO,CAC3B,GAAI5nD,GAAc4nD,CAAQ,EACxB,OAAO,KAGT,IAAMC,EAAUl5D,EAAMm5D,SAChB,CAACC,OAAAA,EAAQjpC,MAAAA,EAAOkpC,WAAAA,CAAU,EAAIr5D,EAAMs5D,WACtC55D,EAAQu5D,EAaZ,OAXI,OAAOG,GAAW,aACpB15D,EAAQ05D,EAAO15D,CAAAA,GAIZwC,GAASxC,CAAQ,IACpBA,EAAQ,OAAO05D,GAAW,SACtBF,EAAQ9uD,MAAM1K,EAAO05D,CACrBF,EAAAA,EAAQ9uD,MAAM1K,CAAM,GAGtBA,IAAU,KACL,MAGLywB,IACFzwB,EAAQywB,IAAU,SAAW/R,GAASi7C,CAAeA,GAAAA,IAAe,IAChEH,EAAQ/3C,QAAQzhB,EAAO,UAAW25D,CAAAA,EAClCH,EAAQ/3C,QAAQzhB,EAAOywB,CAAM,GAG5B,CAACzwB,EACV,CAUA,SAAS65D,GAA0BC,EAASphE,EAAKmC,EAAKk/D,EAAU,CAC9D,IAAMj4D,EAAOu3D,GAAM//D,OAEnB,QAASC,EAAI8/D,GAAMvjD,QAAQgkD,CAAAA,EAAUvgE,EAAIuI,EAAO,EAAG,EAAEvI,EAAG,CACtD,IAAMygE,EAAWtB,GAAUW,GAAM9/D,CAAAA,CAAE,EAC7BkC,EAASu+D,EAASxF,MAAQwF,EAASxF,MAAQ3wD,OAAOo2D,iBAExD,GAAID,EAASpB,QAAUngE,KAAK04B,MAAMt2B,EAAMnC,IAAQ+C,EAASu+D,EAAS/5D,KAAG,GAAO85D,EAC1E,OAAOV,GAAM9/D,CAAE,CAEnB,CAEA,OAAO8/D,GAAMv3D,EAAO,CAAE,CACxB,CAWA,SAASo4D,GAA2B55D,EAAOi3B,EAAUuiC,EAASphE,EAAKmC,EAAK,CACtE,QAAStB,EAAI8/D,GAAM//D,OAAS,EAAGC,GAAK8/D,GAAMvjD,QAAQgkD,CAAAA,EAAUvgE,IAAK,CAC/D,IAAMy4D,EAAOqH,GAAM9/D,CAAE,EACrB,GAAIm/D,GAAU1G,CAAK,EAAC4G,QAAUt4D,EAAMm5D,SAASj4C,KAAK3mB,EAAKnC,EAAKs5D,CAAAA,GAASz6B,EAAW,EAC9E,OAAOy6B,CAEX,CAEA,OAAOqH,GAAMS,EAAUT,GAAMvjD,QAAQgkD,CAAAA,EAAW,CAAC,CACnD,CAMA,SAASK,GAAmBnI,EAAM,CAChC,QAASz4D,EAAI8/D,GAAMvjD,QAAQk8C,CAAQ,EAAA,EAAGlwD,EAAOu3D,GAAM//D,OAAQC,EAAIuI,EAAM,EAAEvI,EACrE,GAAIm/D,GAAUW,GAAM9/D,CAAAA,CAAE,EAAEq/D,OACtB,OAAOS,GAAM9/D,CAAE,CAGrB,CAOA,SAAS6gE,GAAQjpD,EAAOkpD,EAAMC,EAAY,CACxC,GAAI,CAACA,EACHnpD,EAAMkpD,CAAK,EAAG,WACLC,EAAWhhE,OAAQ,CAC5B,GAAM,CAACgpB,GAAAA,EAAIC,GAAAA,CAAAA,EAAMg4C,GAAQD,EAAYD,CAAAA,EAC/BG,EAAYF,EAAWh4C,CAAAA,GAAO+3C,EAAOC,EAAWh4C,CAAG,EAAGg4C,EAAW/3C,CAAG,EAC1EpR,EAAMqpD,CAAU,EAAG,GAEvB,CASA,SAASC,GAAcn6D,EAAO6Q,EAAOsJ,EAAKigD,EAAW,CACnD,IAAMlB,EAAUl5D,EAAMm5D,SAChBrpC,EAAQ,CAACopC,EAAQ/3C,QAAQtQ,EAAM,CAAA,EAAGnR,MAAO06D,CAAAA,EACzCnlD,EAAOpE,EAAMA,EAAM7X,OAAS,CAAA,EAAG0G,MACjCgwB,EAAOjuB,EAEX,IAAKiuB,EAAQI,EAAOJ,GAASza,EAAMya,EAAQ,CAACwpC,EAAQh/D,IAAIw1B,EAAO,EAAG0qC,CAAY,EAC5E34D,EAAQ0Y,EAAIuV,CAAM,EACdjuB,GAAS,IACXoP,EAAMpP,CAAAA,EAAOiuB,MAAQ,IAGzB,OAAO7e,CACT,CAQA,SAASwpD,GAAoBr6D,EAAOlB,EAAQs7D,EAAW,CACrD,IAAMvpD,EAAQ,CAAA,EAERsJ,EAAM,CAAA,EACN3Y,EAAO1C,EAAO9F,OAChBC,EAAGyG,EAEP,IAAKzG,EAAI,EAAGA,EAAIuI,EAAM,EAAEvI,EACtByG,EAAQZ,EAAO7F,CAAE,EACjBkhB,EAAIza,CAAAA,EAASzG,EAEb4X,EAAM5W,KAAK,CACTyF,MAAAA,EACAgwB,MAAO,EACT,CAAA,EAKF,OAAQluB,IAAS,GAAK,CAAC44D,EAAavpD,EAAQspD,GAAcn6D,EAAO6Q,EAAOsJ,EAAKigD,CAAU,CACzF,CAEe,IAAME,GAAN,cAAwBpnC,EAAAA,CAErC,OAAO/vB,GAAK,OAKZ,OAAO9E,SAAW,CAQhBg7C,OAAQ,OAERh4B,SAAU,CAAA,EACV04C,KAAM,CACJX,OAAQ,GACR1H,KAAM,GACNvhC,MAAO,GACPkpC,WAAY,GACZG,QAAS,cACTe,eAAgB,CAAA,CAClB,EACA1pD,MAAO,CASLqlB,OAAQ,OAERa,SAAU,GAEVrH,MAAO,CACLC,QAAS,EACX,CACF,GAMF54B,YAAYyI,EAAO,CACjB,MAAMA,CAAAA,EAGN,KAAKwQ,OAAS,CACZ3N,KAAM,CAAA,EACNwI,OAAQ,CAAA,EACR/K,IAAK,CAAA,CACP,EAGA,KAAK06D,MAAQ,MAEb,KAAKC,WAAapjE,OAClB,KAAKqjE,SAAW,CAAA,EAChB,KAAKC,YAAc,GACnB,KAAKrB,WAAajiE,MACpB,CAEA0pB,KAAKwqB,EAAWrrC,EAAO,CAAA,EAAI,CACzB,IAAM65D,EAAOxuB,EAAUwuB,OAASxuB,EAAUwuB,KAAO,CAAA,GAE3Cb,EAAU,KAAKC,SAAW,IAAI93C,GAASC,MAAMiqB,EAAUlqB,SAAS5pB,IAAI,EAE1EyhE,EAAQn4C,KAAK7gB,CAAAA,EAMbslC,GAAQu0B,EAAKQ,eAAgBrB,EAAQl4C,QAAO,CAAA,EAE5C,KAAKs4C,WAAa,CAChBF,OAAQW,EAAKX,OACbjpC,MAAO4pC,EAAK5pC,MACZkpC,WAAYU,EAAKV,UACnB,EAEA,MAAMt4C,KAAKwqB,CAAAA,EAEX,KAAKovB,YAAcz6D,EAAK06D,UAC1B,CAOAxwD,MAAM3E,EAAKhE,EAAO,CAChB,OAAIgE,IAAQpO,OACH,KAEF+S,GAAM,KAAM3E,CAAAA,CACrB,CAEA4jB,cAAe,CACb,MAAMA,aAAY,EAClB,KAAKrZ,OAAS,CACZ3N,KAAM,CAAA,EACNwI,OAAQ,CAAA,EACR/K,IAAK,CAAA,CACP,CACF,CAEAy1B,qBAAsB,CACpB,IAAMv2B,EAAU,KAAKA,QACfk6D,EAAU,KAAKC,SACfzH,EAAO1yD,EAAQ+6D,KAAKrI,MAAQ,MAE9B,CAACt5D,IAAAA,EAAKmC,IAAAA,EAAK8I,WAAAA,EAAYC,WAAAA,CAAAA,EAAc,KAAKF,cAAa,EAK3D,SAASy3D,EAAaxhB,EAAQ,CACxB,CAACh2C,GAAc,CAACkS,MAAM8jC,EAAOjhD,GAAG,IAClCA,EAAMD,KAAKC,IAAIA,EAAKihD,EAAOjhD,GAAG,GAE5B,CAACkL,GAAc,CAACiS,MAAM8jC,EAAO9+C,GAAG,IAClCA,EAAMpC,KAAKoC,IAAIA,EAAK8+C,EAAO9+C,GAAG,EAElC,EAGI,CAAC8I,GAAc,CAACC,KAElBu3D,EAAa,KAAKC,gBAAe,CAAA,GAI7B97D,EAAQq6C,SAAW,SAAWr6C,EAAQ6R,MAAMqlB,SAAW,WACzD2kC,EAAa,KAAKpvD,UAAU,EAAK,CAAA,GAIrCrT,EAAM8J,GAAS9J,CAAAA,GAAQ,CAACmd,MAAMnd,CAAOA,EAAAA,EAAM,CAAC8gE,EAAQ/3C,QAAQxoB,KAAKC,IAAG,EAAI84D,CAAK,EAC7En3D,EAAM2H,GAAS3H,CAAAA,GAAQ,CAACgb,MAAMhb,CAAAA,EAAOA,EAAM,CAAC2+D,EAAQ93C,MAAMzoB,KAAKC,IAAG,EAAI84D,CAAAA,EAAQ,EAG9E,KAAKt5D,IAAMD,KAAKC,IAAIA,EAAKmC,EAAM,CAAA,EAC/B,KAAKA,IAAMpC,KAAKoC,IAAInC,EAAM,EAAGmC,CAAAA,CAC/B,CAKAugE,iBAAkB,CAChB,IAAM7rD,EAAM,KAAK8rD,mBAAkB,EAC/B3iE,EAAMmL,OAAOE,kBACblJ,EAAMgJ,OAAOC,kBAEjB,OAAIyL,EAAIjW,SACNZ,EAAM6W,EAAI,CAAE,EACZ1U,EAAM0U,EAAIA,EAAIjW,OAAS,CAAE,GAEpB,CAACZ,IAAAA,EAAKmC,IAAAA,CAAG,CAClB,CAKAo7B,YAAa,CACX,IAAM32B,EAAU,KAAKA,QACfg8D,EAAWh8D,EAAQ+6D,KACnB3qC,EAAWpwB,EAAQ6R,MACnBmpD,EAAa5qC,EAAS8G,SAAW,SAAW,KAAK6kC,mBAAkB,EAAK,KAAKE,UAAS,EAExFj8D,EAAQq6C,SAAW,SAAW2gB,EAAWhhE,SAC3C,KAAKZ,IAAM,KAAK27B,UAAYimC,EAAW,CAAE,EACzC,KAAKz/D,IAAM,KAAKu5B,UAAYkmC,EAAWA,EAAWhhE,OAAS,CAAE,GAG/D,IAAMZ,EAAM,KAAKA,IACXmC,EAAM,KAAKA,IAEXsW,EAAQqqD,GAAelB,EAAY5hE,EAAKmC,CAAAA,EAK9C,YAAKigE,MAAQQ,EAAStJ,OAAStiC,EAASD,SACpCoqC,GAA0ByB,EAASxB,QAAS,KAAKphE,IAAK,KAAKmC,IAAK,KAAK4gE,kBAAkB/iE,CACvFwhE,CAAAA,EAAAA,GAA2B,KAAM/oD,EAAM7X,OAAQgiE,EAASxB,QAAS,KAAKphE,IAAK,KAAKmC,GAAG,GACvF,KAAKkgE,WAAa,CAACrrC,EAASM,MAAMC,SAAW,KAAK6qC,QAAU,OAASnjE,OACjEwiE,GAAmB,KAAKW,KAAK,EACjC,KAAKY,YAAYpB,CAAAA,EAEbh7D,EAAQmB,SACV0Q,EAAM1Q,QAAO,EAGRk6D,GAAoB,KAAMxpD,EAAO,KAAK4pD,UAAU,CACzD,CAEAtkC,eAAgB,CAGV,KAAKn3B,QAAQq8D,qBACf,KAAKD,YAAY,KAAKvqD,MAAMsJ,IAAI7gB,GAAQ,CAACA,EAAKoG,KAAK,CAAA,CAEvD,CAUA07D,YAAYpB,EAAa,CAAA,EAAI,CAC3B,IAAI3hE,EAAQ,EACR+H,EAAM,EACN0vB,EAAO7a,EAEP,KAAKjW,QAAQgV,QAAUgmD,EAAWhhE,SACpC82B,EAAQ,KAAKwrC,mBAAmBtB,EAAW,CAAE,CAAA,EACzCA,EAAWhhE,SAAW,EACxBX,EAAQ,EAAIy3B,EAEZz3B,GAAS,KAAKijE,mBAAmBtB,EAAW,CAAA,CAAE,EAAIlqC,GAAS,EAE7D7a,EAAO,KAAKqmD,mBAAmBtB,EAAWA,EAAWhhE,OAAS,CAAE,CAAA,EAC5DghE,EAAWhhE,SAAW,EACxBoH,EAAM6U,EAEN7U,GAAO6U,EAAO,KAAKqmD,mBAAmBtB,EAAWA,EAAWhhE,OAAS,CAAA,CAAE,GAAK,GAGhF,IAAMuiC,EAAQy+B,EAAWhhE,OAAS,EAAI,GAAM,IAC5CX,EAAQw/B,GAAYx/B,EAAO,EAAGkjC,CAAAA,EAC9Bn7B,EAAMy3B,GAAYz3B,EAAK,EAAGm7B,CAAAA,EAE1B,KAAKm/B,SAAW,CAACriE,MAAAA,EAAO+H,IAAAA,EAAKjF,OAAQ,GAAK9C,EAAQ,EAAI+H,EAAI,CAC5D,CASA66D,WAAY,CACV,IAAM/B,EAAU,KAAKC,SACf/gE,EAAM,KAAKA,IACXmC,EAAM,KAAKA,IACXyE,EAAU,KAAKA,QACfg8D,EAAWh8D,EAAQ+6D,KAEnBwB,EAAQP,EAAStJ,MAAQ6H,GAA0ByB,EAASxB,QAASphE,EAAKmC,EAAK,KAAK4gE,kBAAkB/iE,CAAAA,CAAAA,EACtGg7D,EAAWlrD,GAAelJ,EAAQ6R,MAAMuiD,SAAU,CAAA,EAClDoI,EAAUD,IAAU,OAASP,EAAS3B,WAAa,GACnDoC,EAAar9C,GAASo9C,CAAYA,GAAAA,IAAY,GAC9C3qD,EAAQ,CAAA,EACVif,EAAQ13B,EACR2hE,EAAM1vD,EAWV,GARIoxD,IACF3rC,EAAQ,CAACopC,EAAQ/3C,QAAQ2O,EAAO,UAAW0rC,CAAAA,GAI7C1rC,EAAQ,CAACopC,EAAQ/3C,QAAQ2O,EAAO2rC,EAAa,MAAQF,CAAK,EAGtDrC,EAAQh4C,KAAK3mB,EAAKnC,EAAKmjE,CAAAA,EAAS,IAASnI,EAC3C,MAAM,IAAI1yC,MAAMtoB,EAAM,QAAUmC,EAAM,uCAAyC64D,EAAW,IAAMmI,CAAO,EAGzG,IAAMvB,EAAah7D,EAAQ6R,MAAMqlB,SAAW,QAAU,KAAKwlC,kBAAiB,EAC5E,IAAK3B,EAAOjqC,EAAOzlB,EAAQ,EAAG0vD,EAAOx/D,EAAKw/D,EAAO,CAACb,EAAQh/D,IAAI6/D,EAAM3G,EAAUmI,CAAAA,EAAQlxD,IACpFyvD,GAAQjpD,EAAOkpD,EAAMC,CAAAA,EAGvB,OAAID,IAASx/D,GAAOyE,EAAQq6C,SAAW,SAAWhvC,IAAU,IAC1DyvD,GAAQjpD,EAAOkpD,EAAMC,CAAAA,EAIhB77D,OAAOC,KAAKyS,CAAOR,EAAAA,KAAK2oD,EAAAA,EAAQ7+C,IAAI3Z,GAAK,CAACA,CAAAA,CACnD,CAMA0L,iBAAiBxM,EAAO,CACtB,IAAMw5D,EAAU,KAAKC,SACf6B,EAAW,KAAKh8D,QAAQ+6D,KAE9B,OAAIiB,EAASW,cACJzC,EAAQj4C,OAAOvhB,EAAOs7D,EAASW,aAAa,EAE9CzC,EAAQj4C,OAAOvhB,EAAOs7D,EAAST,eAAeqB,QAAQ,CAC/D,CAOA36C,OAAOvhB,EAAOuhB,EAAQ,CAEpB,IAAMD,EADU,KAAKhiB,QACG+6D,KAAKQ,eACvB7I,EAAO,KAAK8I,MACZqB,EAAM56C,GAAUD,EAAQ0wC,CAAK,EACnC,OAAO,KAAKyH,SAASl4C,OAAOvhB,EAAOm8D,CAAAA,CACrC,CAWAC,oBAAoB/B,EAAMt4D,EAAOoP,EAAOoQ,EAAQ,CAC9C,IAAMjiB,EAAU,KAAKA,QACf+8D,EAAY/8D,EAAQ6R,MAAMkmB,SAEhC,GAAIglC,EACF,OAAOvjE,GAAKujE,EAAW,CAAChC,EAAMt4D,EAAOoP,CAAM,EAAE,IAAI,EAGnD,IAAMmQ,EAAUhiB,EAAQ+6D,KAAKQ,eACvB7I,EAAO,KAAK8I,MACZJ,EAAY,KAAKK,WACjBuB,EAActK,GAAQ1wC,EAAQ0wC,CAAK,EACnCuK,EAAc7B,GAAap5C,EAAQo5C,CAAU,EAC7C9gE,EAAOuX,EAAMpP,CAAM,EACnBiuB,EAAQ0qC,GAAa6B,GAAe3iE,GAAQA,EAAKo2B,MAEvD,OAAO,KAAKypC,SAASl4C,OAAO84C,EAAM94C,IAAWyO,EAAQusC,EAAcD,EAAU,CAC/E,CAKAllC,mBAAmBjmB,EAAO,CACxB,IAAI5X,EAAGuI,EAAMlI,EAEb,IAAKL,EAAI,EAAGuI,EAAOqP,EAAM7X,OAAQC,EAAIuI,EAAM,EAAEvI,EAC3CK,EAAOuX,EAAM5X,CAAE,EACfK,EAAK2S,MAAQ,KAAK6vD,oBAAoBxiE,EAAKoG,MAAOzG,EAAG4X,CAAAA,CAEzD,CAMAyqD,mBAAmB57D,EAAO,CACxB,OAAOA,IAAU,KAAO8L,KAAO9L,EAAQ,KAAKtH,MAAQ,KAAKmC,IAAM,KAAKnC,IACtE,CAMAwY,iBAAiBlR,EAAO,CACtB,IAAMw8D,EAAU,KAAKxB,SACf31C,EAAM,KAAKu2C,mBAAmB57D,CAAAA,EACpC,OAAO,KAAK8W,oBAAoB0lD,EAAQ7jE,MAAQ0sB,GAAOm3C,EAAQ/gE,MAAM,CACvE,CAMAub,iBAAiBojB,EAAO,CACtB,IAAMoiC,EAAU,KAAKxB,SACf31C,EAAM,KAAKmV,mBAAmBJ,CAAAA,EAASoiC,EAAQ/gE,OAAS+gE,EAAQ97D,IACtE,OAAO,KAAKhI,IAAM2sB,GAAO,KAAKxqB,IAAM,KAAKnC,IAC3C,CAOA+jE,cAAclwD,EAAO,CACnB,IAAMmwD,EAAY,KAAKp9D,QAAQ6R,MACzBwrD,EAAiB,KAAK71D,IAAIg9C,YAAYv3C,CAAAA,EAAO8I,MAC7C8D,EAAQwC,GAAU,KAAK3I,aAAY,EAAK0pD,EAAUjlC,YAAcilC,EAAUllC,WAAW,EACrFolC,EAAcnkE,KAAKogB,IAAIM,CAAAA,EACvB0jD,EAAcpkE,KAAKsgB,IAAII,CAAAA,EACvB2jD,EAAe,KAAK/iC,wBAAwB,CAAA,EAAG95B,KAErD,MAAO,CACL4nB,EAAI80C,EAAiBC,EAAgBE,EAAeD,EACpD90C,EAAI40C,EAAiBE,EAAgBC,EAAeF,CACtD,CACF,CAOAnB,kBAAkBsB,EAAa,CAC7B,IAAMzB,EAAW,KAAKh8D,QAAQ+6D,KACxBQ,EAAiBS,EAAST,eAG1Bt5C,EAASs5C,EAAeS,EAAStJ,IAAI,GAAK6I,EAAelC,YACzDqE,EAAe,KAAKZ,oBAAoBW,EAAa,EAAGpC,GAAoB,KAAM,CAACoC,GAAc,KAAKhC,UAAU,EAAGx5C,CAAAA,EACnHthB,EAAO,KAAKw8D,cAAcO,CAAAA,EAG1BjD,EAAWthE,KAAKqE,MAAM,KAAKkW,aAAY,EAAK,KAAKqC,MAAQpV,EAAK4nB,EAAI,KAAKzS,OAASnV,EAAK8nB,CAAC,EAAI,EAChG,OAAOgyC,EAAW,EAAIA,EAAW,CACnC,CAKAiC,mBAAoB,CAClB,IAAI1B,EAAa,KAAKhqD,OAAO3N,MAAQ,CAAA,EACjCpJ,EAAGuI,EAEP,GAAIw4D,EAAWhhE,OACb,OAAOghE,EAGT,IAAMvlC,EAAQ,KAAKxwB,wBAAuB,EAE1C,GAAI,KAAK02D,aAAelmC,EAAMz7B,OAC5B,OAAQ,KAAKgX,OAAO3N,KAAOoyB,EAAM,CAAA,EAAGtwB,WAAW2H,mBAAmB,IAAI,EAGxE,IAAK7S,EAAI,EAAGuI,EAAOizB,EAAMz7B,OAAQC,EAAIuI,EAAM,EAAEvI,EAC3C+gE,EAAaA,EAAW7pD,OAAOskB,EAAMx7B,CAAE,EAACkL,WAAW2H,mBAAmB,IAAI,CAAA,EAG5E,OAAQ,KAAKkE,OAAO3N,KAAO,KAAKs6D,UAAU3C,CAAAA,CAC5C,CAKAe,oBAAqB,CACnB,IAAMf,EAAa,KAAKhqD,OAAOnF,QAAU,CAAA,EACrC5R,EAAGuI,EAEP,GAAIw4D,EAAWhhE,OACb,OAAOghE,EAGT,IAAMnvD,EAAS,KAAKC,UAAS,EAC7B,IAAK7R,EAAI,EAAGuI,EAAOqJ,EAAO7R,OAAQC,EAAIuI,EAAM,EAAEvI,EAC5C+gE,EAAW//D,KAAKmQ,GAAM,KAAMS,EAAO5R,CAAE,CAAA,CAAA,EAGvC,OAAQ,KAAK+W,OAAOnF,OAAS,KAAK8vD,YAAcX,EAAa,KAAK2C,UAAU3C,CAAW,CACzF,CAMA2C,UAAU79D,EAAQ,CAEhB,OAAOsR,GAAatR,EAAOuR,KAAK2oD,EAAAA,CAAAA,CAClC,CACF,ECvpBA,SAASvhB,GAAYmlB,EAAOtnD,EAAKnV,EAAS,CACxC,IAAI6hB,EAAK,EACLC,EAAK26C,EAAM5jE,OAAS,EACpB6jE,EAAYC,EAAYC,EAAYC,EACpC78D,GACEmV,GAAOsnD,EAAM56C,CAAAA,EAAI+C,KAAOzP,GAAOsnD,EAAM36C,CAAG,EAAC8C,MAC1C,CAAC/C,GAAAA,EAAIC,GAAAA,CAAAA,EAAMJ,GAAa+6C,EAAO,MAAOtnD,CAAG,GAE3C,CAACyP,IAAK83C,EAAY9C,KAAMgD,CAAU,EAAIH,EAAM56C,CAAAA,EAC5C,CAAC+C,IAAK+3C,EAAY/C,KAAMiD,CAAU,EAAIJ,EAAM36C,CAAAA,IAEzC3M,GAAOsnD,EAAM56C,CAAAA,EAAI+3C,MAAQzkD,GAAOsnD,EAAM36C,CAAG,EAAC83C,OAC3C,CAAC/3C,GAAAA,EAAIC,GAAAA,CAAAA,EAAMJ,GAAa+6C,EAAO,OAAQtnD,CAAG,GAE5C,CAACykD,KAAM8C,EAAY93C,IAAKg4C,CAAU,EAAIH,EAAM56C,CAAAA,EAC5C,CAAC+3C,KAAM+C,EAAY/3C,IAAKi4C,CAAU,EAAIJ,EAAM36C,CAAAA,GAG/C,IAAMg7C,EAAOH,EAAaD,EAC1B,OAAOI,EAAOF,GAAcC,EAAaD,IAAeznD,EAAMunD,GAAcI,EAAOF,CACrF,CAEA,IAAMG,GAAN,cAA8B5C,EAAAA,CAE5B,OAAOn3D,GAAK,aAKZ,OAAO9E,SAAWi8D,GAAUj8D,SAK5BtH,YAAYyI,EAAO,CACjB,MAAMA,CAAAA,EAGN,KAAK29D,OAAS,CAAA,EAEd,KAAKC,QAAU/lE,OAEf,KAAKgmE,YAAchmE,MACrB,CAKA+jE,aAAc,CACZ,IAAMpB,EAAa,KAAKsD,uBAAsB,EACxCV,EAAQ,KAAKO,OAAS,KAAKI,iBAAiBvD,CAAAA,EAClD,KAAKoD,QAAU3lB,GAAYmlB,EAAO,KAAKxkE,GAAG,EAC1C,KAAKilE,YAAc5lB,GAAYmlB,EAAO,KAAKriE,GAAG,EAAI,KAAK6iE,QACvD,MAAMhC,YAAYpB,CAAAA,CACpB,CAaAuD,iBAAiBvD,EAAY,CAC3B,GAAM,CAAC5hE,IAAAA,EAAKmC,IAAAA,CAAG,EAAI,KACbxB,EAAQ,CAAA,EACR6jE,EAAQ,CAAA,EACV3jE,EAAGuI,EAAMgJ,EAAMiG,EAAMkB,EAEzB,IAAK1Y,EAAI,EAAGuI,EAAOw4D,EAAWhhE,OAAQC,EAAIuI,EAAM,EAAEvI,EAChDwX,EAAOupD,EAAW/gE,CAAE,EAChBwX,GAAQrY,GAAOqY,GAAQlW,GACzBxB,EAAMkB,KAAKwW,CAAAA,EAIf,GAAI1X,EAAMC,OAAS,EAEjB,MAAO,CACL,CAAC+gE,KAAM3hE,EAAK2sB,IAAK,CAAC,EAClB,CAACg1C,KAAMx/D,EAAKwqB,IAAK,CAAC,CACnB,EAGH,IAAK9rB,EAAI,EAAGuI,EAAOzI,EAAMC,OAAQC,EAAIuI,EAAM,EAAEvI,EAC3C0Y,EAAO5Y,EAAME,EAAI,CAAE,EACnBuR,EAAOzR,EAAME,EAAI,CAAE,EACnBwX,EAAO1X,EAAME,CAAE,EAGXd,KAAKg4B,OAAOxe,EAAOnH,GAAQ,CAAA,IAAOiG,GACpCmsD,EAAM3iE,KAAK,CAAC8/D,KAAMtpD,EAAMsU,IAAK9rB,GAAKuI,EAAO,EAAE,CAAA,EAG/C,OAAOo7D,CACT,CAQA3B,WAAY,CACV,IAAM7iE,EAAM,KAAKA,IACXmC,EAAM,KAAKA,IACby/D,EAAa,MAAM0B,kBAAiB,EACxC,OAAI,CAAC1B,EAAWr0C,SAASvtB,CAAAA,GAAQ,CAAC4hE,EAAWhhE,SAC3CghE,EAAW5qD,OAAO,EAAG,EAAGhX,CAAAA,GAEtB,CAAC4hE,EAAWr0C,SAASprB,CAAAA,GAAQy/D,EAAWhhE,SAAW,IACrDghE,EAAW//D,KAAKM,CAAAA,EAEXy/D,EAAW3pD,KAAK,CAACC,EAAGrP,IAAMqP,EAAIrP,CAAAA,CACvC,CAOAq8D,wBAAyB,CACvB,IAAItD,EAAa,KAAKhqD,OAAOlQ,KAAO,CAAA,EAEpC,GAAIk6D,EAAWhhE,OACb,OAAOghE,EAGT,IAAM33D,EAAO,KAAKq5D,kBAAiB,EAC7BzvD,EAAQ,KAAK8uD,mBAAkB,EACrC,OAAI14D,EAAKrJ,QAAUiT,EAAMjT,OAGvBghE,EAAa,KAAK2C,UAAUt6D,EAAK8N,OAAOlE,CAAAA,CAAAA,EAExC+tD,EAAa33D,EAAKrJ,OAASqJ,EAAO4J,EAEpC+tD,EAAa,KAAKhqD,OAAOlQ,IAAMk6D,EAExBA,CACT,CAMAsB,mBAAmB57D,EAAO,CACxB,OAAQ+3C,GAAY,KAAK0lB,OAAQz9D,CAAS,EAAA,KAAK09D,SAAW,KAAKC,WACjE,CAMA3mD,iBAAiBojB,EAAO,CACtB,IAAMoiC,EAAU,KAAKxB,SACf3gC,EAAU,KAAKG,mBAAmBJ,CAAAA,EAASoiC,EAAQ/gE,OAAS+gE,EAAQ97D,IAC1E,OAAOq3C,GAAY,KAAK0lB,OAAQpjC,EAAU,KAAKsjC,YAAc,KAAKD,QAAS,EAAI,CACjF,CACF,8IC3JaI,GAAgB,CAC3Bt8B,GACA70B,GACA0N,GACAhV,ICrBF04D,GAAM,SAAS,GAAGC,EAAa,ECAhB,SAARC,IAAyB,CAC9B,MAAO,CACL,MAAO,CACL,GAAM,CAAE,YAAAC,CAAY,EAAI,KAAK,IAAI,QACjC,IAAIC,GAAM,KAAK,IAAK,KAAK,MAAMD,CAAW,CAAC,CAC7C,CACF,CACF,CCTe,SAARE,IAAyB,CAC9B,MAAO,CACL,QAAS,GACT,MAAO,EACP,QAAS,EACT,QAAS,EACT,aAAc,EACd,SAAU,EACV,MAAO,CACL,GAAM,CAAE,QAAAC,EAAS,MAAAC,EAAO,QAAAC,EAAS,QAAAC,CAAQ,EAAI,KAAK,IAAI,QACtD,KAAK,QAAUH,IAAY,OAC3B,KAAK,MAAQ,OAAOC,CAAK,EACzB,KAAK,QAAU,OAAOC,CAAO,EAC7B,KAAK,QAAU,OAAOC,CAAO,EAC7B,KAAK,aAAe,KAAK,MAAQ,KAAO,KAAK,QAAU,GAAK,KAAK,QAC7D,KAAK,SACP,KAAK,MAAM,CAEf,EACA,OAAQ,CACN,KAAK,SAAW,YAAY,IAAM,CAChC,KAAK,cAAgB,EACrB,KAAK,MAAQ,KAAK,eAAe,EACjC,KAAK,QAAU,KAAK,iBAAiB,EACrC,KAAK,QAAU,KAAK,iBAAiB,CACvC,EAAG,GAAI,CACT,EACA,MAAO,CACL,cAAc,KAAK,QAAQ,EAC3B,KAAK,UAAU,YAAY,CAC7B,EACA,gBAAiB,CACf,OAAI,KAAK,cAAgB,KAChB,KAAK,MAAM,KAAK,aAAe,IAAI,EAErC,CACT,EACA,kBAAmB,CACjB,GAAI,KAAK,cAAgB,GAAI,CAC3B,IAAMC,EACJ,KAAK,aAAe,KAAK,eAAe,EAAI,KAC9C,OAAIA,GAAqB,GAChB,KAAK,MAAMA,EAAoB,EAAE,EAEnC,CACT,CACA,MAAO,EACT,EACA,kBAAmB,CACjB,GAAI,KAAK,aAAe,EAAG,CACzB,IAAMC,EAAe,KAAK,eAAe,EAAI,KACvCC,EAAiB,KAAK,iBAAiB,EAAI,GAC3CC,EACJ,KAAK,cAAgBF,EAAeC,GACtC,OAAIC,EAAmB,EACdA,EAEF,CACT,CACA,MAAO,EACT,EACA,cAAe,CACb,IAAMN,EAAQ,OAAO,KAAK,KAAK,EAAE,SAAS,EAAG,GAAG,EAC1CC,EAAU,OAAO,KAAK,OAAO,EAAE,SAAS,EAAG,GAAG,EAC9CC,EAAU,OAAO,KAAK,OAAO,EAAE,SAAS,EAAG,GAAG,EACpD,MAAO,GAAGF,CAAK,IAAIC,CAAO,IAAIC,CAAO,EACvC,CACF,CACF,CCpEe,SAARK,IAA4C,CACjD,MAAO,CACL,UAAW,GACX,aAAc,KACd,SAAU,KACV,MAAO,CACL,GAAM,CAAE,SAAAC,CAAS,EAAI,KAAK,IAAI,QAE1BA,EAAS,OAAS,GAAKA,IAAa,SACtC,KAAK,SAAWA,EAChB,KAAK,aAAeA,EAExB,EACA,kBAAmB,CACjB,GAAI,KAAK,OAAO,QAAQ,MAAM,CAAC,EAAG,CAChC,IAAMC,EAAS,IAAI,gBAAgB,KAAK,OAAO,OAAO,MAAM,CAAC,CAAC,EAC9D,KAAK,SAAWA,EAChB,KAAK,aAAeA,EACpB,KAAK,UAAY,EACnB,CACF,EACA,mBAAoB,CAClB,KAAK,UAAY,GACjB,KAAK,aAAe,KACpB,KAAK,SAAW,KAChB,KAAK,MAAM,UAAU,MAAQ,IAC/B,EACA,eAAgB,CACd,MAAO,EACT,CACF,CACF,CC/BA,IAAAC,GAAiB,SAEF,SAARC,IAAiC,CACtC,MAAO,CACL,UAAW,KACX,YAAa,KACb,MAAO,CACL,GAAM,CAAE,YAAAC,EAAa,UAAAC,CAAU,EAAI,KAAK,IAAI,QAC5C,KAAK,YAAc,KAAK,MAAMD,CAAW,EACzC,KAAK,UAAYC,CACnB,EACA,aAAc,CACZ,GAAAC,QAAK,KAAK,KAAK,WAAW,EAAE,KAC1B,CAAC,CAAE,YAAAC,CAAY,IACbA,GAAe,KAAK,IAAI,cAAc,IAAI,MAAM,KAAK,SAAS,CAAC,CACnE,CACF,CACF,CACF,CClBe,SAARC,IAAiC,CACtC,MAAO,CACL,MAAO,CAAC,CACV,CACF,CCJO,IAAIC,GAAQ,CACf,WACA,UACA,cACA,YACA,YACA,gBACA,SACA,gBACA,UACA,gBACA,eACA,uBACJ,EACWC,GAAW,CAClB,SAAU,CAAC,EACX,WAAY,GACZ,oBAAqB,GACrB,UAAW,SACX,SAAU,GACV,cAAe,qBACf,QAAS,OAAO,QAAW,UACvB,OAAO,UAAU,UAAU,QAAQ,MAAM,IAAM,GACnD,eAAgB,SAChB,oBAAqB,GACrB,WAAY,GACZ,cAAe,GACf,YAAa,KACb,WAAY,QACZ,YAAa,GACb,cAAe,EACf,eAAgB,EAChB,QAAS,CAAC,EACV,cAAe,GACf,cAAe,GACf,WAAY,GACZ,aAAc,SAAUC,EAAK,CACzB,OAAO,OAAO,QAAY,KAAe,QAAQ,KAAKA,CAAG,CAC7D,EACA,QAAS,SAAUC,EAAW,CAC1B,IAAIC,EAAO,IAAI,KAAKD,EAAU,QAAQ,CAAC,EACvCC,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EACxBA,EAAK,QAAQA,EAAK,QAAQ,EAAI,GAAMA,EAAK,OAAO,EAAI,GAAK,CAAE,EAC3D,IAAIC,EAAQ,IAAI,KAAKD,EAAK,YAAY,EAAG,EAAG,CAAC,EAC7C,MAAQ,GACJ,KAAK,QAAQA,EAAK,QAAQ,EAAIC,EAAM,QAAQ,GAAK,MAC7C,GACEA,EAAM,OAAO,EAAI,GAAK,GACxB,CAAC,CACb,EACA,cAAe,EACf,qBAAsB,CAAC,EACvB,OAAQ,GACR,OAAQ,UACR,gBAAiB,EACjB,KAAM,SACN,kBAAmB,WACnB,UAAW,yOACX,WAAY,GACZ,IAAK,IAAI,KACT,SAAU,CAAC,EACX,QAAS,CAAC,EACV,YAAa,CAAC,EACd,UAAW,CAAC,EACZ,UAAW,CAAC,EACZ,cAAe,CAAC,EAChB,OAAQ,CAAC,EACT,cAAe,CAAC,EAChB,QAAS,CAAC,EACV,cAAe,CAAC,EAChB,aAAc,CAAC,EACf,sBAAuB,CAAC,EACxB,QAAS,CAAC,EACV,SAAU,OACV,gBAAiB,OACjB,UAAW,uOACX,sBAAuB,GACvB,WAAY,EACZ,OAAQ,GACR,UAAW,GACX,YAAa,GACb,KAAM,EACV,EClFO,IAAIC,GAAU,CACjB,SAAU,CACN,UAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAC3D,SAAU,CACN,SACA,SACA,UACA,YACA,WACA,SACA,UACJ,CACJ,EACA,OAAQ,CACJ,UAAW,CACP,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,EACA,SAAU,CACN,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,UACJ,CACJ,EACA,YAAa,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAC5D,eAAgB,EAChB,QAAS,SAAUC,EAAK,CACpB,IAAIC,EAAID,EAAM,IACd,GAAIC,EAAI,GAAKA,EAAI,GACb,MAAO,KACX,OAAQA,EAAI,GAAI,CACZ,IAAK,GACD,MAAO,KACX,IAAK,GACD,MAAO,KACX,IAAK,GACD,MAAO,KACX,QACI,MAAO,IACf,CACJ,EACA,eAAgB,OAChB,iBAAkB,KAClB,YAAa,sBACb,YAAa,kBACb,KAAM,CAAC,KAAM,IAAI,EACjB,cAAe,OACf,eAAgB,QAChB,cAAe,OACf,gBAAiB,SACjB,UAAW,EACf,EACOC,GAAQH,GCvER,IAAII,GAAM,SAAUC,EAAQC,EAAQ,CACvC,OAAIA,IAAW,SAAUA,EAAS,IAC1B,MAAQD,GAAQ,MAAMC,EAAS,EAAE,CAC7C,EACWC,GAAM,SAAUC,EAAM,CAAE,OAAQA,IAAS,GAAO,EAAI,CAAI,EAC5D,SAASC,GAASC,EAAIC,EAAM,CAC/B,IAAI,EACJ,OAAO,UAAY,CACf,IAAIC,EAAQ,KACRC,EAAO,UACX,aAAa,CAAC,EACd,EAAI,WAAW,UAAY,CAAE,OAAOH,EAAG,MAAME,EAAOC,CAAI,CAAG,EAAGF,CAAI,CACtE,CACJ,CACO,IAAIG,GAAW,SAAUC,EAAK,CACjC,OAAOA,aAAe,MAAQA,EAAM,CAACA,CAAG,CAC5C,EChBO,SAASC,GAAYC,EAAMC,EAAWC,EAAM,CAC/C,GAAIA,IAAS,GACT,OAAOF,EAAK,UAAU,IAAIC,CAAS,EACvCD,EAAK,UAAU,OAAOC,CAAS,CACnC,CACO,SAASE,GAAcC,EAAKH,EAAWI,EAAS,CACnD,IAAIC,EAAI,OAAO,SAAS,cAAcF,CAAG,EACzC,OAAAH,EAAYA,GAAa,GACzBI,EAAUA,GAAW,GACrBC,EAAE,UAAYL,EACVI,IAAY,SACZC,EAAE,YAAcD,GACbC,CACX,CACO,SAASC,GAAUC,EAAM,CAC5B,KAAOA,EAAK,YACRA,EAAK,YAAYA,EAAK,UAAU,CACxC,CACO,SAASC,GAAWD,EAAME,EAAW,CACxC,GAAIA,EAAUF,CAAI,EACd,OAAOA,EACN,GAAIA,EAAK,WACV,OAAOC,GAAWD,EAAK,WAAYE,CAAS,CAEpD,CACO,SAASC,GAAkBC,EAAgBC,EAAM,CACpD,IAAIC,EAAUX,GAAc,MAAO,iBAAiB,EAAGY,EAAWZ,GAAc,QAAS,YAAcS,CAAc,EAAGI,EAAUb,GAAc,OAAQ,SAAS,EAAGc,EAAYd,GAAc,OAAQ,WAAW,EAQjN,GAPI,UAAU,UAAU,QAAQ,UAAU,IAAM,GAC5CY,EAAS,KAAO,UAGhBA,EAAS,KAAO,OAChBA,EAAS,QAAU,QAEnBF,IAAS,OACT,QAASK,KAAOL,EACZE,EAAS,aAAaG,EAAKL,EAAKK,CAAG,CAAC,EAC5C,OAAAJ,EAAQ,YAAYC,CAAQ,EAC5BD,EAAQ,YAAYE,CAAO,EAC3BF,EAAQ,YAAYG,CAAS,EACtBH,CACX,CACO,SAASK,GAAeC,EAAO,CAClC,GAAI,CACA,GAAI,OAAOA,EAAM,cAAiB,WAAY,CAC1C,IAAIC,EAAOD,EAAM,aAAa,EAC9B,OAAOC,EAAK,CAAC,CACjB,CACA,OAAOD,EAAM,MACjB,MACc,CACV,OAAOA,EAAM,MACjB,CACJ,CCpDA,IAAIE,GAAY,UAAY,CAAoB,EACrCC,GAAa,SAAUC,EAAaC,EAAWC,EAAQ,CAAE,OAAOA,EAAO,OAAOD,EAAY,YAAc,UAAU,EAAED,CAAW,CAAG,EAClIG,GAAY,CACnB,EAAGL,GACH,EAAG,SAAUM,EAASC,EAAWH,EAAQ,CACrCE,EAAQ,SAASF,EAAO,OAAO,SAAS,QAAQG,CAAS,CAAC,CAC9D,EACA,EAAG,SAAUD,EAASE,EAAM,CACxBF,EAAQ,UAAUA,EAAQ,SAAS,GAAK,GAAK,GAAK,GAAK,WAAWE,CAAI,CAAC,CAC3E,EACA,EAAG,SAAUF,EAASE,EAAM,CACxBF,EAAQ,SAAS,WAAWE,CAAI,CAAC,CACrC,EACA,EAAG,SAAUF,EAASG,EAAK,CACvBH,EAAQ,QAAQ,WAAWG,CAAG,CAAC,CACnC,EACA,EAAG,SAAUH,EAASI,EAAMN,EAAQ,CAChCE,EAAQ,SAAUA,EAAQ,SAAS,EAAI,GACnC,GAAKK,GAAI,IAAI,OAAOP,EAAO,KAAK,CAAC,EAAG,GAAG,EAAE,KAAKM,CAAI,CAAC,CAAC,CAC5D,EACA,EAAG,SAAUJ,EAASM,EAAYR,EAAQ,CACtCE,EAAQ,SAASF,EAAO,OAAO,UAAU,QAAQQ,CAAU,CAAC,CAChE,EACA,EAAG,SAAUN,EAASO,EAAS,CAC3BP,EAAQ,WAAW,WAAWO,CAAO,CAAC,CAC1C,EACA,EAAG,SAAUC,EAAGC,EAAa,CAAE,OAAO,IAAI,KAAK,WAAWA,CAAW,EAAI,GAAI,CAAG,EAChF,EAAG,SAAUT,EAASU,EAASZ,EAAQ,CACnC,IAAIa,EAAa,SAASD,CAAO,EAC7BE,EAAO,IAAI,KAAKZ,EAAQ,YAAY,EAAG,EAAG,GAAKW,EAAa,GAAK,EAAG,EAAG,EAAG,EAAG,CAAC,EAClF,OAAAC,EAAK,QAAQA,EAAK,QAAQ,EAAIA,EAAK,OAAO,EAAId,EAAO,cAAc,EAC5Dc,CACX,EACA,EAAG,SAAUZ,EAASa,EAAM,CACxBb,EAAQ,YAAY,WAAWa,CAAI,CAAC,CACxC,EACA,EAAG,SAAUL,EAAGM,EAAS,CAAE,OAAO,IAAI,KAAKA,CAAO,CAAG,EACrD,EAAG,SAAUd,EAASG,EAAK,CACvBH,EAAQ,QAAQ,WAAWG,CAAG,CAAC,CACnC,EACA,EAAG,SAAUH,EAASE,EAAM,CACxBF,EAAQ,UAAUA,EAAQ,SAAS,GAAK,GAAK,GAAK,GAAK,WAAWE,CAAI,CAAC,CAC3E,EACA,EAAG,SAAUF,EAASe,EAAS,CAC3Bf,EAAQ,WAAW,WAAWe,CAAO,CAAC,CAC1C,EACA,EAAG,SAAUf,EAASG,EAAK,CACvBH,EAAQ,QAAQ,WAAWG,CAAG,CAAC,CACnC,EACA,EAAGT,GACH,EAAG,SAAUM,EAASgB,EAAO,CACzBhB,EAAQ,SAAS,WAAWgB,CAAK,EAAI,CAAC,CAC1C,EACA,EAAG,SAAUhB,EAASgB,EAAO,CACzBhB,EAAQ,SAAS,WAAWgB,CAAK,EAAI,CAAC,CAC1C,EACA,EAAG,SAAUhB,EAASO,EAAS,CAC3BP,EAAQ,WAAW,WAAWO,CAAO,CAAC,CAC1C,EACA,EAAG,SAAUC,EAAGS,EAAiB,CAC7B,OAAO,IAAI,KAAK,WAAWA,CAAe,CAAC,CAC/C,EACA,EAAGvB,GACH,EAAG,SAAUM,EAASa,EAAM,CACxBb,EAAQ,YAAY,IAAO,WAAWa,CAAI,CAAC,CAC/C,CACJ,EACWK,GAAa,CACpB,EAAG,GACH,EAAG,GACH,EAAG,eACH,EAAG,eACH,EAAG,mBACH,EAAG,GACH,EAAG,GACH,EAAG,eACH,EAAG,OACH,EAAG,eACH,EAAG,WACH,EAAG,OACH,EAAG,eACH,EAAG,eACH,EAAG,eACH,EAAG,eACH,EAAG,GACH,EAAG,eACH,EAAG,eACH,EAAG,eACH,EAAG,OACH,EAAG,eACH,EAAG,UACP,EACWC,GAAU,CACjB,EAAG,SAAUP,EAAM,CAAE,OAAOA,EAAK,YAAY,CAAG,EAChD,EAAG,SAAUA,EAAMd,EAAQsB,EAAS,CAChC,OAAOtB,EAAO,SAAS,UAAUqB,GAAQ,EAAEP,EAAMd,EAAQsB,CAAO,CAAC,CACrE,EACA,EAAG,SAAUR,EAAMd,EAAQsB,EAAS,CAChC,OAAOzB,GAAWwB,GAAQ,EAAEP,EAAMd,EAAQsB,CAAO,EAAI,EAAG,GAAOtB,CAAM,CACzE,EACA,EAAG,SAAUc,EAAMd,EAAQsB,EAAS,CAChC,OAAOC,GAAIF,GAAQ,EAAEP,EAAMd,EAAQsB,CAAO,CAAC,CAC/C,EACA,EAAG,SAAUR,EAAM,CAAE,OAAOS,GAAIT,EAAK,SAAS,CAAC,CAAG,EAClD,EAAG,SAAUA,EAAMd,EAAQ,CACvB,OAAOA,EAAO,UAAY,OACpBc,EAAK,QAAQ,EAAId,EAAO,QAAQc,EAAK,QAAQ,CAAC,EAC9CA,EAAK,QAAQ,CACvB,EACA,EAAG,SAAUA,EAAMd,EAAQ,CAAE,OAAOA,EAAO,KAAKO,GAAIO,EAAK,SAAS,EAAI,EAAE,CAAC,CAAG,EAC5E,EAAG,SAAUA,EAAMd,EAAQ,CACvB,OAAOH,GAAWiB,EAAK,SAAS,EAAG,GAAMd,CAAM,CACnD,EACA,EAAG,SAAUc,EAAM,CAAE,OAAOS,GAAIT,EAAK,WAAW,CAAC,CAAG,EACpD,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,QAAQ,EAAI,GAAM,EACnD,EAAG,SAAUA,EAAMJ,EAAGY,EAAS,CAC3B,OAAOA,EAAQ,QAAQR,CAAI,CAC/B,EACA,EAAG,SAAUA,EAAM,CAAE,OAAOS,GAAIT,EAAK,YAAY,EAAG,CAAC,CAAG,EACxD,EAAG,SAAUA,EAAM,CAAE,OAAOS,GAAIT,EAAK,QAAQ,CAAC,CAAG,EACjD,EAAG,SAAUA,EAAM,CAAE,OAAQA,EAAK,SAAS,EAAI,GAAKA,EAAK,SAAS,EAAI,GAAK,EAAK,EAChF,EAAG,SAAUA,EAAM,CAAE,OAAOS,GAAIT,EAAK,WAAW,CAAC,CAAG,EACpD,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,QAAQ,CAAG,EAC5C,EAAG,SAAUA,EAAMd,EAAQ,CACvB,OAAOA,EAAO,SAAS,SAASc,EAAK,OAAO,CAAC,CACjD,EACA,EAAG,SAAUA,EAAM,CAAE,OAAOS,GAAIT,EAAK,SAAS,EAAI,CAAC,CAAG,EACtD,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,SAAS,EAAI,CAAG,EACjD,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,WAAW,CAAG,EAC/C,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,QAAQ,CAAG,EAC5C,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,OAAO,CAAG,EAC3C,EAAG,SAAUA,EAAM,CAAE,OAAO,OAAOA,EAAK,YAAY,CAAC,EAAE,UAAU,CAAC,CAAG,CACzE,EClIO,IAAIU,GAAsB,SAAUC,EAAI,CAC3C,IAAIC,EAAKD,EAAG,OAAQE,EAASD,IAAO,OAASE,GAAWF,EAAIG,EAAKJ,EAAG,KAAMK,EAAOD,IAAO,OAASE,GAAUF,EAAIG,EAAKP,EAAG,SAAUQ,EAAWD,IAAO,OAAS,GAAQA,EACpK,OAAO,SAAUE,EAASC,EAAMC,EAAgB,CAC5C,IAAIC,EAASD,GAAkBN,EAC/B,OAAIH,EAAO,aAAe,QAAa,CAACM,EAC7BN,EAAO,WAAWO,EAASC,EAAME,CAAM,EAE3CF,EACF,MAAM,EAAE,EACR,IAAI,SAAUG,EAAGC,EAAGC,EAAK,CAC1B,OAAOC,GAAQH,CAAC,GAAKE,EAAID,EAAI,CAAC,IAAM,KAC9BE,GAAQH,CAAC,EAAEJ,EAASG,EAAQV,CAAM,EAClCW,IAAM,KACFA,EACA,EACd,CAAC,EACI,KAAK,EAAE,CAChB,CACJ,EACWI,GAAmB,SAAUjB,EAAI,CACxC,IAAIC,EAAKD,EAAG,OAAQE,EAASD,IAAO,OAASE,GAAWF,EAAIG,EAAKJ,EAAG,KAAMK,EAAOD,IAAO,OAASE,GAAUF,EAC3G,OAAO,SAAUc,EAAMC,EAAaC,EAAUC,EAAc,CACxD,GAAI,EAAAH,IAAS,GAAK,CAACA,GAEnB,KAAIN,EAASS,GAAgBhB,EACzBiB,EACAC,EAAWL,EACf,GAAIA,aAAgB,KAChBI,EAAa,IAAI,KAAKJ,EAAK,QAAQ,CAAC,UAC/B,OAAOA,GAAS,UACrBA,EAAK,UAAY,OACjBI,EAAa,IAAI,KAAKJ,CAAI,UACrB,OAAOA,GAAS,SAAU,CAC/B,IAAIM,EAASL,IAAgBjB,GAAUC,IAAU,WAC7CsB,EAAU,OAAOP,CAAI,EAAE,KAAK,EAChC,GAAIO,IAAY,QACZH,EAAa,IAAI,KACjBF,EAAW,WAENlB,GAAUA,EAAO,UACtBoB,EAAapB,EAAO,UAAUgB,EAAMM,CAAM,UAErC,KAAK,KAAKC,CAAO,GACtB,OAAO,KAAKA,CAAO,EACnBH,EAAa,IAAI,KAAKJ,CAAI,MAEzB,CAED,QADIQ,EAAU,OAAQC,EAAM,CAAC,EACpBb,EAAI,EAAGc,EAAa,EAAGC,EAAW,GAAIf,EAAIU,EAAO,OAAQV,IAAK,CACnE,IAAIgB,EAAQN,EAAOV,CAAC,EAChBiB,EAAcD,IAAU,KACxBE,EAAUR,EAAOV,EAAI,CAAC,IAAM,MAAQiB,EACxC,GAAIE,GAAWH,CAAK,GAAK,CAACE,EAAS,CAC/BH,GAAYI,GAAWH,CAAK,EAC5B,IAAII,EAAQ,IAAI,OAAOL,CAAQ,EAAE,KAAKX,CAAI,EACtCgB,IAAUR,EAAU,KACpBC,EAAIG,IAAU,IAAM,OAAS,SAAS,EAAE,CACpC,GAAIK,GAAUL,CAAK,EACnB,IAAKI,EAAM,EAAEN,CAAU,CAC3B,CAAC,CAET,MACUG,IACNF,GAAY,IACpB,CACAP,EACI,CAACpB,GAAU,CAACA,EAAO,WACb,IAAI,KAAK,IAAI,KAAK,EAAE,YAAY,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACnD,IAAI,KAAK,IAAI,KAAK,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,CAAC,EAClDyB,EAAI,QAAQ,SAAU3B,EAAI,CACtB,IAAIoC,EAAKpC,EAAG,GAAIqC,EAAMrC,EAAG,IACzB,OAAQsB,EAAac,EAAGd,EAAYe,EAAKzB,CAAM,GAAKU,CACxD,CAAC,EACDA,EAAaI,EAAUJ,EAAa,MACxC,CACJ,CACA,GAAI,EAAEA,aAAsB,MAAQ,CAAC,MAAMA,EAAW,QAAQ,CAAC,GAAI,CAC/DpB,EAAO,aAAa,IAAI,MAAM,0BAA4BqB,CAAQ,CAAC,EACnE,MACJ,CACA,OAAIH,IAAa,IACbE,EAAW,SAAS,EAAG,EAAG,EAAG,CAAC,EAC3BA,EACX,CACJ,EACO,SAASgB,GAAaC,EAAOC,EAAOpB,EAAU,CAEjD,OADIA,IAAa,SAAUA,EAAW,IAClCA,IAAa,GACL,IAAI,KAAKmB,EAAM,QAAQ,CAAC,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,EACjD,IAAI,KAAKC,EAAM,QAAQ,CAAC,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,EAE9CD,EAAM,QAAQ,EAAIC,EAAM,QAAQ,CAC3C,CAOO,IAAIC,GAAY,SAAUC,EAAIC,EAAKC,EAAK,CAC3C,OAAOF,EAAK,KAAK,IAAIC,EAAKC,CAAG,GAAKF,EAAK,KAAK,IAAIC,EAAKC,CAAG,CAC5D,EACWC,GAAgC,SAAUC,EAAOC,EAASC,EAAS,CAC1E,OAAOF,EAAQ,KAAOC,EAAU,GAAKC,CACzC,EACWC,GAAe,SAAUC,EAAsB,CACtD,IAAIJ,EAAQ,KAAK,MAAMI,EAAuB,IAAI,EAAGH,GAAWG,EAAuBJ,EAAQ,MAAQ,GACvG,MAAO,CAACA,EAAOC,EAASG,EAAuBJ,EAAQ,KAAOC,EAAU,EAAE,CAC9E,EACWI,GAAW,CAClB,IAAK,KACT,EACO,SAASC,GAAgBC,EAAQ,CACpC,IAAIP,EAAQO,EAAO,YACfN,EAAUM,EAAO,cACjBL,EAAUK,EAAO,eACrB,GAAIA,EAAO,UAAY,OAAW,CAC9B,IAAIC,EAAUD,EAAO,QAAQ,SAAS,EAClCE,EAAaF,EAAO,QAAQ,WAAW,EACvCG,EAAaH,EAAO,QAAQ,WAAW,EACvCP,EAAQQ,IACRR,EAAQQ,GAERR,IAAUQ,GAAWP,EAAUQ,IAC/BR,EAAUQ,GAEVT,IAAUQ,GAAWP,IAAYQ,GAAcP,EAAUQ,IACzDR,EAAUK,EAAO,QAAQ,WAAW,EAC5C,CACA,GAAIA,EAAO,UAAY,OAAW,CAC9B,IAAII,EAAQJ,EAAO,QAAQ,SAAS,EAChCK,EAAaL,EAAO,QAAQ,WAAW,EAC3CP,EAAQ,KAAK,IAAIA,EAAOW,CAAK,EACzBX,IAAUW,IACVV,EAAU,KAAK,IAAIW,EAAYX,CAAO,GACtCD,IAAUW,GAASV,IAAYW,IAC/BV,EAAUK,EAAO,QAAQ,WAAW,EAC5C,CACA,MAAO,CAAE,MAAOP,EAAO,QAASC,EAAS,QAASC,CAAQ,CAC9D,CC7II,OAAO,OAAO,QAAW,aACzB,OAAO,OAAS,SAAUW,EAAQ,CAE9B,QADIC,EAAO,CAAC,EACHC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCD,EAAKC,EAAK,CAAC,EAAI,UAAUA,CAAE,EAE/B,GAAI,CAACF,EACD,MAAM,UAAU,4CAA4C,EAOhE,QALIG,EAAU,SAAUC,EAAQ,CACxBA,GACA,OAAO,KAAKA,CAAM,EAAE,QAAQ,SAAUC,EAAK,CAAE,OAAQL,EAAOK,CAAG,EAAID,EAAOC,CAAG,CAAI,CAAC,CAE1F,EACSC,EAAK,EAAGC,EAASN,EAAMK,EAAKC,EAAO,OAAQD,IAAM,CACtD,IAAIF,EAASG,EAAOD,CAAE,EACtBH,EAAQC,CAAM,CAClB,CACA,OAAOJ,CACX,GCpBJ,IAAIQ,GAAsC,UAAY,CAClD,OAAAA,GAAW,OAAO,QAAU,SAASC,EAAG,CACpC,QAASC,EAAGC,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IAAK,CACjDD,EAAI,UAAUC,CAAC,EACf,QAASE,KAAKH,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGG,CAAC,IAC1DJ,EAAEI,CAAC,EAAIH,EAAEG,CAAC,EAClB,CACA,OAAOJ,CACX,EACOD,GAAS,MAAM,KAAM,SAAS,CACzC,EACIM,GAAkD,UAAY,CAC9D,QAASJ,EAAI,EAAGC,EAAI,EAAGI,EAAK,UAAU,OAAQJ,EAAII,EAAIJ,IAAKD,GAAK,UAAUC,CAAC,EAAE,OAC7E,QAASK,EAAI,MAAMN,CAAC,EAAGO,EAAI,EAAGN,EAAI,EAAGA,EAAII,EAAIJ,IACzC,QAASO,EAAI,UAAUP,CAAC,EAAGQ,EAAI,EAAGC,EAAKF,EAAE,OAAQC,EAAIC,EAAID,IAAKF,IAC1DD,EAAEC,CAAC,EAAIC,EAAEC,CAAC,EAClB,OAAOH,CACX,EAQIK,GAAsB,IAC1B,SAASC,GAAkBC,EAASC,EAAgB,CAChD,IAAIC,EAAO,CACP,OAAQjB,GAASA,GAAS,CAAC,EAAGkB,EAAc,EAAGC,GAAU,aAAa,EACtE,KAAMC,EACV,EACAH,EAAK,UAAYI,GAAiB,CAAE,OAAQJ,EAAK,OAAQ,KAAMA,EAAK,IAAK,CAAC,EAC1EA,EAAK,UAAY,CAAC,EAClBA,EAAK,eAAiB,CAAC,EACvBA,EAAK,cAAgB,CAAC,EACtBA,EAAK,MAAQK,EACbL,EAAK,kBAAoBM,EACzBN,EAAK,kBAAoBO,GACzBP,EAAK,YAAcQ,GACnBR,EAAK,WAAaS,GAClBT,EAAK,MAAQU,GACbV,EAAK,MAAQW,GACbX,EAAK,YAAcY,GACnBZ,EAAK,eAAiBa,GACtBb,EAAK,UAAYc,EACjBd,EAAK,QAAUe,GACff,EAAK,UAAYgB,GACjBhB,EAAK,WAAaiB,EAClBjB,EAAK,YAAckB,GACnBlB,EAAK,KAAOmB,GACZnB,EAAK,OAASoB,GACdpB,EAAK,IAAMqB,GACXrB,EAAK,QAAUsB,GACftB,EAAK,OAASuB,GACd,SAASC,GAAuB,CAC5BxB,EAAK,MAAQ,CACT,eAAgB,SAAUyB,EAAOC,EAAI,CAGjC,OAFID,IAAU,SAAUA,EAAQzB,EAAK,cACjC0B,IAAO,SAAUA,EAAK1B,EAAK,aAC3ByB,IAAU,IAAOC,EAAK,IAAM,GAAKA,EAAK,MAAQ,GAAMA,EAAK,MAAQ,GAC1D,GACJ1B,EAAK,KAAK,YAAYyB,CAAK,CACtC,CACJ,CACJ,CACA,SAASE,GAAO,CACZ3B,EAAK,QAAUA,EAAK,MAAQF,EAC5BE,EAAK,OAAS,GACd4B,GAAY,EACZC,GAAY,EACZC,GAAY,EACZC,GAAW,EACXP,EAAqB,EAChBxB,EAAK,UACNgC,EAAM,EACVC,EAAW,GACPjC,EAAK,cAAc,QAAUA,EAAK,OAAO,cACrCA,EAAK,OAAO,YACZM,EAAiBN,EAAK,OAAO,WAAaA,EAAK,sBAAwB,MAAS,EAEpFkB,GAAY,EAAK,GAErBgB,EAAiB,EACjB,IAAIC,EAAW,iCAAiC,KAAK,UAAU,SAAS,EACpE,CAACnC,EAAK,UAAYmC,GAClB5B,GAAiB,EAErB6B,GAAa,SAAS,CAC1B,CACA,SAASC,GAA0B,CAC/B,IAAIC,EACJ,QAAUA,EAAKtC,EAAK,qBAAuB,MAAQsC,IAAO,OAAS,OAASA,EAAG,YAAY,GACtF,eAAiB,SAAS,aACnC,CACA,SAASC,EAAeC,EAAI,CACxB,OAAOA,EAAG,KAAKxC,CAAI,CACvB,CACA,SAASkC,GAAmB,CACxB,IAAIO,EAASzC,EAAK,OACdyC,EAAO,cAAgB,IAASA,EAAO,aAAe,GAGjDA,EAAO,aAAe,IAC3B,OAAO,sBAAsB,UAAY,CAKrC,GAJIzC,EAAK,oBAAsB,SAC3BA,EAAK,kBAAkB,MAAM,WAAa,SAC1CA,EAAK,kBAAkB,MAAM,QAAU,SAEvCA,EAAK,gBAAkB,OAAW,CAClC,IAAI0C,GAAa1C,EAAK,KAAK,YAAc,GAAKyC,EAAO,WACrDzC,EAAK,cAAc,MAAM,MAAQ0C,EAAY,KAC7C1C,EAAK,kBAAkB,MAAM,MACzB0C,GACK1C,EAAK,cAAgB,OAChBA,EAAK,YAAY,YACjB,GACN,KACRA,EAAK,kBAAkB,MAAM,eAAe,YAAY,EACxDA,EAAK,kBAAkB,MAAM,eAAe,SAAS,CACzD,CACJ,CAAC,CAET,CACA,SAAS2C,EAAWC,EAAG,CACnB,GAAI5C,EAAK,cAAc,SAAW,EAAG,CACjC,IAAI6C,EAAc7C,EAAK,OAAO,UAAY,QACtC8C,GAAa,IAAI,KAAQ9C,EAAK,OAAO,OAAO,GAAK,EAC/C,IAAI,KACJ,IAAI,KAAKA,EAAK,OAAO,QAAQ,QAAQ,CAAC,EACxCC,EAAW8C,GAAgB/C,EAAK,MAAM,EAC1C6C,EAAY,SAAS5C,EAAS,MAAOA,EAAS,QAASA,EAAS,QAAS4C,EAAY,gBAAgB,CAAC,EACtG7C,EAAK,cAAgB,CAAC6C,CAAW,EACjC7C,EAAK,sBAAwB6C,CACjC,CACID,IAAM,QAAaA,EAAE,OAAS,QAC9BI,GAAYJ,CAAC,EAEjB,IAAIK,EAAYjD,EAAK,OAAO,MAC5BkD,EAAmB,EACnBhC,GAAY,EACRlB,EAAK,OAAO,QAAUiD,GACtBjD,EAAK,iBAAiB,CAE9B,CACA,SAASmD,EAAcC,EAAMC,EAAM,CAC/B,OAAQD,EAAO,GAAM,GAAKE,GAAID,IAASrD,EAAK,KAAK,KAAK,CAAC,CAAC,CAC5D,CACA,SAASuD,EAAcH,EAAM,CACzB,OAAQA,EAAO,GAAI,CACf,IAAK,GACL,IAAK,IACD,MAAO,IACX,QACI,OAAOA,EAAO,EACtB,CACJ,CACA,SAASF,GAAqB,CAC1B,GAAI,EAAAlD,EAAK,cAAgB,QAAaA,EAAK,gBAAkB,QAE7D,KAAIwD,GAAS,SAASxD,EAAK,YAAY,MAAM,MAAM,EAAE,EAAG,EAAE,GAAK,GAAK,GAAIyD,GAAW,SAASzD,EAAK,cAAc,MAAO,EAAE,GAAK,GAAK,GAAI0D,EAAU1D,EAAK,gBAAkB,QAChK,SAASA,EAAK,cAAc,MAAO,EAAE,GAAK,GAAK,GAChD,EACFA,EAAK,OAAS,SACdwD,EAAQL,EAAcK,EAAOxD,EAAK,KAAK,WAAW,GAEtD,IAAI2D,EAAgB3D,EAAK,OAAO,UAAY,QACvCA,EAAK,OAAO,SACTA,EAAK,gBACLA,EAAK,uBACL8C,GAAa9C,EAAK,sBAAuBA,EAAK,OAAO,QAAS,EAAI,IAC9D,EACR4D,EAAgB5D,EAAK,OAAO,UAAY,QACvCA,EAAK,OAAO,SACTA,EAAK,gBACLA,EAAK,uBACL8C,GAAa9C,EAAK,sBAAuBA,EAAK,OAAO,QAAS,EAAI,IAC9D,EACZ,GAAIA,EAAK,OAAO,UAAY,QACxBA,EAAK,OAAO,UAAY,QACxBA,EAAK,OAAO,QAAUA,EAAK,OAAO,QAAS,CAC3C,IAAI6D,EAAWC,GAA8B9D,EAAK,OAAO,QAAQ,SAAS,EAAGA,EAAK,OAAO,QAAQ,WAAW,EAAGA,EAAK,OAAO,QAAQ,WAAW,CAAC,EAC3I+D,GAAWD,GAA8B9D,EAAK,OAAO,QAAQ,SAAS,EAAGA,EAAK,OAAO,QAAQ,WAAW,EAAGA,EAAK,OAAO,QAAQ,WAAW,CAAC,EAC3IgE,EAAcF,GAA8BN,EAAOC,EAASC,CAAO,EACvE,GAAIM,EAAcD,IAAYC,EAAcH,EAAU,CAClD,IAAII,GAASC,GAAaL,CAAQ,EAClCL,EAAQS,GAAO,CAAC,EAChBR,EAAUQ,GAAO,CAAC,EAClBP,EAAUO,GAAO,CAAC,CACtB,CACJ,KACK,CACD,GAAIL,EAAe,CACf,IAAIO,EAAUnE,EAAK,OAAO,UAAY,OAChCA,EAAK,OAAO,QACZA,EAAK,OAAO,QAClBwD,EAAQ,KAAK,IAAIA,EAAOW,EAAQ,SAAS,CAAC,EACtCX,IAAUW,EAAQ,SAAS,IAC3BV,EAAU,KAAK,IAAIA,EAASU,EAAQ,WAAW,CAAC,GAChDV,IAAYU,EAAQ,WAAW,IAC/BT,EAAU,KAAK,IAAIA,EAASS,EAAQ,WAAW,CAAC,EACxD,CACA,GAAIR,EAAe,CACf,IAAIS,EAAUpE,EAAK,OAAO,UAAY,OAChCA,EAAK,OAAO,QACZA,EAAK,OAAO,QAClBwD,EAAQ,KAAK,IAAIA,EAAOY,EAAQ,SAAS,CAAC,EACtCZ,IAAUY,EAAQ,SAAS,GAAKX,EAAUW,EAAQ,WAAW,IAC7DX,EAAUW,EAAQ,WAAW,GAC7BX,IAAYW,EAAQ,WAAW,IAC/BV,EAAU,KAAK,IAAIA,EAASU,EAAQ,WAAW,CAAC,EACxD,CACJ,CACAC,EAASb,EAAOC,EAASC,CAAO,EACpC,CACA,SAASpD,EAAiBgE,EAAS,CAC/B,IAAIC,EAAOD,GAAWtE,EAAK,sBACvBuE,GAAQA,aAAgB,MACxBF,EAASE,EAAK,SAAS,EAAGA,EAAK,WAAW,EAAGA,EAAK,WAAW,CAAC,CAEtE,CACA,SAASF,EAASb,EAAOC,EAASC,EAAS,CACnC1D,EAAK,wBAA0B,QAC/BA,EAAK,sBAAsB,SAASwD,EAAQ,GAAIC,EAASC,GAAW,EAAG,CAAC,EAExE,GAAC1D,EAAK,aAAe,CAACA,EAAK,eAAiBA,EAAK,YAErDA,EAAK,YAAY,MAAQwE,GAAKxE,EAAK,OAAO,UAEpCwD,GADE,GAAKA,GAAS,GAAM,GAAKF,GAAIE,EAAQ,KAAO,CAAC,CAC1C,EACXxD,EAAK,cAAc,MAAQwE,GAAIf,CAAO,EAClCzD,EAAK,OAAS,SACdA,EAAK,KAAK,YAAcA,EAAK,KAAK,KAAKsD,GAAIE,GAAS,EAAE,CAAC,GACvDxD,EAAK,gBAAkB,SACvBA,EAAK,cAAc,MAAQwE,GAAId,CAAO,GAC9C,CACA,SAASe,EAAYC,EAAO,CACxB,IAAIC,EAAcC,GAAeF,CAAK,EAClCG,EAAO,SAASF,EAAY,KAAK,GAAKD,EAAM,OAAS,IACrDG,EAAO,IAAO,GACbH,EAAM,MAAQ,SAAW,CAAC,QAAQ,KAAKG,EAAK,SAAS,CAAC,IACvDpE,GAAWoE,CAAI,CAEvB,CACA,SAASxE,EAAKP,EAAS4E,EAAOI,EAASC,EAAS,CAC5C,GAAIL,aAAiB,MACjB,OAAOA,EAAM,QAAQ,SAAUM,EAAI,CAAE,OAAO3E,EAAKP,EAASkF,EAAIF,EAASC,CAAO,CAAG,CAAC,EACtF,GAAIjF,aAAmB,MACnB,OAAOA,EAAQ,QAAQ,SAAUmF,EAAI,CAAE,OAAO5E,EAAK4E,EAAIP,EAAOI,EAASC,CAAO,CAAG,CAAC,EACtFjF,EAAQ,iBAAiB4E,EAAOI,EAASC,CAAO,EAChD/E,EAAK,UAAU,KAAK,CAChB,OAAQ,UAAY,CAAE,OAAOF,EAAQ,oBAAoB4E,EAAOI,EAASC,CAAO,CAAG,CACvF,CAAC,CACL,CACA,SAASG,GAAgB,CACrB9C,GAAa,UAAU,CAC3B,CACA,SAASH,GAAa,CAQlB,GAPIjC,EAAK,OAAO,MACZ,CAAC,OAAQ,QAAS,SAAU,OAAO,EAAE,QAAQ,SAAUmF,EAAK,CACxD,MAAM,UAAU,QAAQ,KAAKnF,EAAK,QAAQ,iBAAiB,SAAWmF,EAAM,GAAG,EAAG,SAAUF,EAAI,CAC5F,OAAO5E,EAAK4E,EAAI,QAASjF,EAAKmF,CAAG,CAAC,CACtC,CAAC,CACL,CAAC,EAEDnF,EAAK,SAAU,CACfoF,GAAY,EACZ,MACJ,CACA,IAAIC,EAAkBC,GAASC,GAAU,EAAE,EA2B3C,GA1BAvF,EAAK,iBAAmBsF,GAASJ,EAAetF,EAAmB,EAC/DI,EAAK,eAAiB,CAAC,oBAAoB,KAAK,UAAU,SAAS,GACnEK,EAAKL,EAAK,cAAe,YAAa,SAAU4C,EAAG,CAC3C5C,EAAK,OAAO,OAAS,SACrBY,GAAYgE,GAAehC,CAAC,CAAC,CACrC,CAAC,EACLvC,EAAKL,EAAK,OAAQ,UAAWwF,EAAS,EAClCxF,EAAK,oBAAsB,QAC3BK,EAAKL,EAAK,kBAAmB,UAAWwF,EAAS,EAEjD,CAACxF,EAAK,OAAO,QAAU,CAACA,EAAK,OAAO,QACpCK,EAAK,OAAQ,SAAUgF,CAAe,EACtC,OAAO,eAAiB,OACxBhF,EAAK,OAAO,SAAU,aAAcoF,EAAa,EAEjDpF,EAAK,OAAO,SAAU,YAAaoF,EAAa,EACpDpF,EAAK,OAAO,SAAU,QAASoF,GAAe,CAAE,QAAS,EAAK,CAAC,EAC3DzF,EAAK,OAAO,aAAe,KAC3BK,EAAKL,EAAK,OAAQ,QAASA,EAAK,IAAI,EACpCK,EAAKL,EAAK,OAAQ,QAASA,EAAK,IAAI,GAEpCA,EAAK,gBAAkB,SACvBK,EAAKL,EAAK,SAAU,QAAS0F,EAAe,EAC5CrF,EAAKL,EAAK,SAAU,CAAC,QAAS,WAAW,EAAGyE,CAAW,EACvDpE,EAAKL,EAAK,cAAe,QAAS2F,EAAU,GAE5C3F,EAAK,gBAAkB,QACvBA,EAAK,gBAAkB,QACvBA,EAAK,cAAgB,OAAW,CAChC,IAAI4F,EAAU,SAAUhD,EAAG,CACvB,OAAOgC,GAAehC,CAAC,EAAE,OAAO,CACpC,EACAvC,EAAKL,EAAK,cAAe,CAAC,WAAW,EAAG2C,CAAU,EAClDtC,EAAKL,EAAK,cAAe,OAAQ2C,EAAY,CAAE,QAAS,EAAK,CAAC,EAC9DtC,EAAKL,EAAK,cAAe,QAAS6F,CAAa,EAC/CxF,EAAK,CAACL,EAAK,YAAaA,EAAK,aAAa,EAAG,CAAC,QAAS,OAAO,EAAG4F,CAAO,EACpE5F,EAAK,gBAAkB,QACvBK,EAAKL,EAAK,cAAe,QAAS,UAAY,CAAE,OAAOA,EAAK,eAAiBA,EAAK,cAAc,OAAO,CAAG,CAAC,EAC3GA,EAAK,OAAS,QACdK,EAAKL,EAAK,KAAM,QAAS,SAAU4C,EAAG,CAClCD,EAAWC,CAAC,CAChB,CAAC,CAET,CACI5C,EAAK,OAAO,YACZK,EAAKL,EAAK,OAAQ,OAAQ8F,EAAM,CAExC,CACA,SAAS7E,EAAW8E,EAAUb,EAAe,CACzC,IAAIc,EAASD,IAAa,OACpB/F,EAAK,UAAU+F,CAAQ,EACvB/F,EAAK,wBACFA,EAAK,OAAO,SAAWA,EAAK,OAAO,QAAUA,EAAK,IAC7CA,EAAK,OAAO,QACZA,EAAK,OAAO,SAAWA,EAAK,OAAO,QAAUA,EAAK,IAC9CA,EAAK,OAAO,QACZA,EAAK,KACnBiG,EAAUjG,EAAK,YACfkG,EAAWlG,EAAK,aACpB,GAAI,CACIgG,IAAW,SACXhG,EAAK,YAAcgG,EAAO,YAAY,EACtChG,EAAK,aAAegG,EAAO,SAAS,EAE5C,OACOpD,EAAG,CACNA,EAAE,QAAU,0BAA4BoD,EACxChG,EAAK,OAAO,aAAa4C,CAAC,CAC9B,CACIsC,GAAiBlF,EAAK,cAAgBiG,IACtC7D,GAAa,cAAc,EAC3B+D,GAAiB,GAEjBjB,IACClF,EAAK,cAAgBiG,GAAWjG,EAAK,eAAiBkG,IACvD9D,GAAa,eAAe,EAEhCpC,EAAK,OAAO,CAChB,CACA,SAAS6F,EAAcjD,EAAG,CACtB,IAAI+B,EAAcC,GAAehC,CAAC,EAC9B,CAAC+B,EAAY,UAAU,QAAQ,OAAO,GACtCyB,EAAkBxD,EAAG+B,EAAY,UAAU,SAAS,SAAS,EAAI,EAAI,EAAE,CAC/E,CACA,SAASyB,EAAkBxD,EAAGyD,EAAOC,EAAW,CAC5C,IAAIC,EAAS3D,GAAKgC,GAAehC,CAAC,EAC9B4D,EAAQF,GACPC,GAAUA,EAAO,YAAcA,EAAO,WAAW,WAClD7B,EAAQ+B,GAAY,WAAW,EACnC/B,EAAM,MAAQ2B,EACdG,GAASA,EAAM,cAAc9B,CAAK,CACtC,CACA,SAAS1C,GAAQ,CACb,IAAI0E,EAAW,OAAO,SAAS,uBAAuB,EAGtD,GAFA1G,EAAK,kBAAoBa,GAAc,MAAO,oBAAoB,EAClEb,EAAK,kBAAkB,SAAW,GAC9B,CAACA,EAAK,OAAO,WAAY,CAGzB,GAFA0G,EAAS,YAAYC,EAAc,CAAC,EACpC3G,EAAK,eAAiBa,GAAc,MAAO,0BAA0B,EACjEb,EAAK,OAAO,YAAa,CACzB,IAAIsC,EAAKsE,EAAW,EAAGC,EAAcvE,EAAG,YAAawE,EAAcxE,EAAG,YACtEtC,EAAK,eAAe,YAAY6G,CAAW,EAC3C7G,EAAK,YAAc8G,EACnB9G,EAAK,YAAc6G,CACvB,CACA7G,EAAK,WAAaa,GAAc,MAAO,sBAAsB,EAC7Db,EAAK,WAAW,YAAY+G,EAAc,CAAC,EACtC/G,EAAK,gBACNA,EAAK,cAAgBa,GAAc,MAAO,gBAAgB,EAC1Db,EAAK,cAAc,SAAW,IAElCgH,EAAU,EACVhH,EAAK,WAAW,YAAYA,EAAK,aAAa,EAC9CA,EAAK,eAAe,YAAYA,EAAK,UAAU,EAC/C0G,EAAS,YAAY1G,EAAK,cAAc,CAC5C,CACIA,EAAK,OAAO,YACZ0G,EAAS,YAAYO,EAAU,CAAC,EAEpCC,GAAYlH,EAAK,kBAAmB,YAAaA,EAAK,OAAO,OAAS,OAAO,EAC7EkH,GAAYlH,EAAK,kBAAmB,UAAWA,EAAK,OAAO,UAAY,EAAI,EAC3EkH,GAAYlH,EAAK,kBAAmB,aAAcA,EAAK,OAAO,WAAa,CAAC,EAC5EA,EAAK,kBAAkB,YAAY0G,CAAQ,EAC3C,IAAIS,EAAenH,EAAK,OAAO,WAAa,QACxCA,EAAK,OAAO,SAAS,WAAa,OACtC,IAAIA,EAAK,OAAO,QAAUA,EAAK,OAAO,UAClCA,EAAK,kBAAkB,UAAU,IAAIA,EAAK,OAAO,OAAS,SAAW,QAAQ,EACzEA,EAAK,OAAO,SACR,CAACmH,GAAgBnH,EAAK,QAAQ,WAC9BA,EAAK,QAAQ,WAAW,aAAaA,EAAK,kBAAmBA,EAAK,OAAO,WAAW,EAC/EA,EAAK,OAAO,WAAa,QAC9BA,EAAK,OAAO,SAAS,YAAYA,EAAK,iBAAiB,GAE3DA,EAAK,OAAO,QAAQ,CACpB,IAAIoH,EAAUvG,GAAc,MAAO,mBAAmB,EAClDb,EAAK,QAAQ,YACbA,EAAK,QAAQ,WAAW,aAAaoH,EAASpH,EAAK,OAAO,EAC9DoH,EAAQ,YAAYpH,EAAK,OAAO,EAC5BA,EAAK,UACLoH,EAAQ,YAAYpH,EAAK,QAAQ,EACrCoH,EAAQ,YAAYpH,EAAK,iBAAiB,CAC9C,CAEA,CAACA,EAAK,OAAO,QAAU,CAACA,EAAK,OAAO,SACnCA,EAAK,OAAO,WAAa,OACpBA,EAAK,OAAO,SACZ,OAAO,SAAS,MAAM,YAAYA,EAAK,iBAAiB,CACtE,CACA,SAASc,EAAUuG,EAAW9C,EAAM+C,EAAYpI,EAAG,CAC/C,IAAIqI,EAAgBvG,GAAUuD,EAAM,EAAI,EAAGiD,EAAa3G,GAAc,OAAQwG,EAAW9C,EAAK,QAAQ,EAAE,SAAS,CAAC,EAClH,OAAAiD,EAAW,QAAUjD,EACrBiD,EAAW,GAAKtI,EAChBsI,EAAW,aAAa,aAAcxH,EAAK,WAAWuE,EAAMvE,EAAK,OAAO,cAAc,CAAC,EACnFqH,EAAU,QAAQ,QAAQ,IAAM,IAChCvE,GAAayB,EAAMvE,EAAK,GAAG,IAAM,IACjCA,EAAK,cAAgBwH,EACrBA,EAAW,UAAU,IAAI,OAAO,EAChCA,EAAW,aAAa,eAAgB,MAAM,GAE9CD,GACAC,EAAW,SAAW,GAClBC,GAAelD,CAAI,IACnBiD,EAAW,UAAU,IAAI,UAAU,EACnCxH,EAAK,iBAAmBwH,EACpBxH,EAAK,OAAO,OAAS,UACrBkH,GAAYM,EAAY,aAAcxH,EAAK,cAAc,CAAC,GACtD8C,GAAayB,EAAMvE,EAAK,cAAc,CAAC,EAAG,EAAI,IAAM,CAAC,EACzDkH,GAAYM,EAAY,WAAYxH,EAAK,cAAc,CAAC,GACpD8C,GAAayB,EAAMvE,EAAK,cAAc,CAAC,EAAG,EAAI,IAAM,CAAC,EACrDqH,IAAc,gBACdG,EAAW,UAAU,IAAI,SAAS,KAK9CA,EAAW,UAAU,IAAI,oBAAoB,EAE7CxH,EAAK,OAAO,OAAS,SACjB0H,GAAcnD,CAAI,GAAK,CAACkD,GAAelD,CAAI,GAC3CiD,EAAW,UAAU,IAAI,SAAS,EAEtCxH,EAAK,aACLA,EAAK,OAAO,aAAe,GAC3BqH,IAAc,gBACdnI,EAAI,IAAM,GACVc,EAAK,YAAY,mBAAmB,YAAa,+BAAiCA,EAAK,OAAO,QAAQuE,CAAI,EAAI,SAAS,EAE3HnC,GAAa,cAAeoF,CAAU,EAC/BA,CACX,CACA,SAASG,EAAeC,EAAY,CAChCA,EAAW,MAAM,EACb5H,EAAK,OAAO,OAAS,SACrBY,GAAYgH,CAAU,CAC9B,CACA,SAASC,EAAqBxB,EAAO,CAGjC,QAFIyB,EAAazB,EAAQ,EAAI,EAAIrG,EAAK,OAAO,WAAa,EACtD+H,EAAW1B,EAAQ,EAAIrG,EAAK,OAAO,WAAa,GAC3CgI,EAAIF,EAAYE,GAAKD,EAAUC,GAAK3B,EAIzC,QAHI5E,EAAQzB,EAAK,cAAc,SAASgI,CAAC,EACrCC,EAAa5B,EAAQ,EAAI,EAAI5E,EAAM,SAAS,OAAS,EACrDyG,GAAW7B,EAAQ,EAAI5E,EAAM,SAAS,OAAS,GAC1CvC,EAAI+I,EAAY/I,GAAKgJ,GAAUhJ,GAAKmH,EAAO,CAChD,IAAI8B,GAAI1G,EAAM,SAASvC,CAAC,EACxB,GAAIiJ,GAAE,UAAU,QAAQ,QAAQ,IAAM,IAAMnH,GAAUmH,GAAE,OAAO,EAC3D,OAAOA,EACf,CAGR,CACA,SAASC,EAAoBC,EAAShC,EAAO,CAMzC,QALIiC,EAAaD,EAAQ,UAAU,QAAQ,OAAO,IAAM,GAClDA,EAAQ,QAAQ,SAAS,EACzBrI,EAAK,aACP+H,EAAW1B,EAAQ,EAAIrG,EAAK,OAAO,WAAa,GAChDuI,EAAYlC,EAAQ,EAAI,EAAI,GACvB2B,EAAIM,EAAatI,EAAK,aAAcgI,GAAKD,EAAUC,GAAKO,EAQ7D,QAPI9G,GAAQzB,EAAK,cAAc,SAASgI,CAAC,EACrCC,EAAaK,EAAatI,EAAK,eAAiBgI,EAC9CK,EAAQ,GAAKhC,EACbA,EAAQ,EACJ5E,GAAM,SAAS,OAAS,EACxB,EACN+G,GAAe/G,GAAM,SAAS,OACzBvC,EAAI+I,EAAY/I,GAAK,GAAKA,EAAIsJ,IAAgBtJ,IAAMmH,EAAQ,EAAImC,GAAe,IAAKtJ,GAAKqJ,EAAW,CACzG,IAAIJ,EAAI1G,GAAM,SAASvC,CAAC,EACxB,GAAIiJ,EAAE,UAAU,QAAQ,QAAQ,IAAM,IAClCnH,GAAUmH,EAAE,OAAO,GACnB,KAAK,IAAIE,EAAQ,GAAKnJ,CAAC,GAAK,KAAK,IAAImH,CAAK,EAC1C,OAAOsB,EAAeQ,CAAC,CAC/B,CAEJnI,EAAK,YAAYuI,CAAS,EAC1BE,EAAWZ,EAAqBU,CAAS,EAAG,CAAC,CAEjD,CACA,SAASE,EAAWJ,EAASK,EAAQ,CACjC,IAAIC,EAAgBtG,EAAwB,EACxCuG,EAAaC,GAASF,GAAiB,SAAS,IAAI,EACpDG,EAAYT,IAAY,OACtBA,EACAO,EACID,EACA3I,EAAK,mBAAqB,QAAa6I,GAAS7I,EAAK,gBAAgB,EACjEA,EAAK,iBACLA,EAAK,gBAAkB,QAAa6I,GAAS7I,EAAK,aAAa,EAC3DA,EAAK,cACL6H,EAAqBa,EAAS,EAAI,EAAI,EAAE,EACtDI,IAAc,OACd9I,EAAK,OAAO,MAAM,EAEZ4I,EAINR,EAAoBU,EAAWJ,CAAM,EAHrCf,EAAemB,CAAS,CAKhC,CACA,SAASC,EAAelE,EAAMpD,EAAO,CAKjC,QAJIuH,GAAgB,IAAI,KAAKnE,EAAMpD,EAAO,CAAC,EAAE,OAAO,EAAIzB,EAAK,KAAK,eAAiB,GAAK,EACpFiJ,EAAgBjJ,EAAK,MAAM,gBAAgByB,EAAQ,EAAI,IAAM,GAAIoD,CAAI,EACrEqE,EAAclJ,EAAK,MAAM,eAAeyB,EAAOoD,CAAI,EAAGsE,EAAO,OAAO,SAAS,uBAAuB,EAAGC,GAAepJ,EAAK,OAAO,WAAa,EAAGqJ,EAAoBD,GAAe,sBAAwB,eAAgBE,GAAoBF,GAAe,sBAAwB,eACxRG,EAAYN,EAAgB,EAAID,EAAcQ,EAAW,EACtDD,GAAaN,EAAeM,IAAaC,IAC5CL,EAAK,YAAYrI,EAAU,iBAAmBuI,EAAmB,IAAI,KAAKxE,EAAMpD,EAAQ,EAAG8H,CAAS,EAAGA,EAAWC,CAAQ,CAAC,EAE/H,IAAKD,EAAY,EAAGA,GAAaL,EAAaK,IAAaC,IACvDL,EAAK,YAAYrI,EAAU,gBAAiB,IAAI,KAAK+D,EAAMpD,EAAO8H,CAAS,EAAGA,EAAWC,CAAQ,CAAC,EAEtG,QAASC,GAASP,EAAc,EAAGO,IAAU,GAAKT,IAC7ChJ,EAAK,OAAO,aAAe,GAAKwJ,EAAW,IAAM,GAAIC,KAAUD,IAChEL,EAAK,YAAYrI,EAAU,iBAAmBwI,GAAmB,IAAI,KAAKzE,EAAMpD,EAAQ,EAAGgI,GAASP,CAAW,EAAGO,GAAQD,CAAQ,CAAC,EAEvI,IAAIE,GAAe7I,GAAc,MAAO,cAAc,EACtD,OAAA6I,GAAa,YAAYP,CAAI,EACtBO,EACX,CACA,SAAS1C,GAAY,CACjB,GAAIhH,EAAK,gBAAkB,OAG3B,CAAA2J,GAAU3J,EAAK,aAAa,EACxBA,EAAK,aACL2J,GAAU3J,EAAK,WAAW,EAE9B,QADI4J,EAAO,SAAS,uBAAuB,EAClC1K,EAAI,EAAGA,EAAIc,EAAK,OAAO,WAAYd,IAAK,CAC7C,IAAI2K,EAAI,IAAI,KAAK7J,EAAK,YAAaA,EAAK,aAAc,CAAC,EACvD6J,EAAE,SAAS7J,EAAK,aAAed,CAAC,EAChC0K,EAAK,YAAYb,EAAec,EAAE,YAAY,EAAGA,EAAE,SAAS,CAAC,CAAC,CAClE,CACA7J,EAAK,cAAc,YAAY4J,CAAI,EACnC5J,EAAK,KAAOA,EAAK,cAAc,WAC3BA,EAAK,OAAO,OAAS,SAAWA,EAAK,cAAc,SAAW,GAC9DY,GAAY,EAEpB,CACA,SAASuF,IAAmB,CACxB,GAAI,EAAAnG,EAAK,OAAO,WAAa,GACzBA,EAAK,OAAO,oBAAsB,YAEtC,KAAI8J,EAAmB,SAAUrI,EAAO,CACpC,OAAIzB,EAAK,OAAO,UAAY,QACxBA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAY,GACrDyB,EAAQzB,EAAK,OAAO,QAAQ,SAAS,EAC9B,GAEJ,EAAEA,EAAK,OAAO,UAAY,QAC7BA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAY,GACrDyB,EAAQzB,EAAK,OAAO,QAAQ,SAAS,EAC7C,EACAA,EAAK,wBAAwB,SAAW,GACxCA,EAAK,wBAAwB,UAAY,GACzC,QAASd,EAAI,EAAGA,EAAI,GAAIA,IACpB,GAAK4K,EAAiB5K,CAAC,EAEvB,KAAIuC,EAAQZ,GAAc,SAAU,+BAA+B,EACnEY,EAAM,MAAQ,IAAI,KAAKzB,EAAK,YAAad,CAAC,EAAE,SAAS,EAAE,SAAS,EAChEuC,EAAM,YAAcsI,GAAW7K,EAAGc,EAAK,OAAO,sBAAuBA,EAAK,IAAI,EAC9EyB,EAAM,SAAW,GACbzB,EAAK,eAAiBd,IACtBuC,EAAM,SAAW,IAErBzB,EAAK,wBAAwB,YAAYyB,CAAK,GAEtD,CACA,SAASuI,IAAa,CAClB,IAAIC,EAAYpJ,GAAc,MAAO,iBAAiB,EAClDqJ,EAAmB,OAAO,SAAS,uBAAuB,EAC1DC,EACAnK,EAAK,OAAO,WAAa,GACzBA,EAAK,OAAO,oBAAsB,SAClCmK,EAAetJ,GAAc,OAAQ,WAAW,GAGhDb,EAAK,wBAA0Ba,GAAc,SAAU,gCAAgC,EACvFb,EAAK,wBAAwB,aAAa,aAAcA,EAAK,KAAK,cAAc,EAChFK,EAAKL,EAAK,wBAAyB,SAAU,SAAU4C,GAAG,CACtD,IAAI2D,EAAS3B,GAAehC,EAAC,EACzBwH,GAAgB,SAAS7D,EAAO,MAAO,EAAE,EAC7CvG,EAAK,YAAYoK,GAAgBpK,EAAK,YAAY,EAClDoC,GAAa,eAAe,CAChC,CAAC,EACD+D,GAAiB,EACjBgE,EAAenK,EAAK,yBAExB,IAAIqK,EAAYC,GAAkB,WAAY,CAAE,SAAU,IAAK,CAAC,EAC5DC,EAAcF,EAAU,qBAAqB,OAAO,EAAE,CAAC,EAC3DE,EAAY,aAAa,aAAcvK,EAAK,KAAK,aAAa,EAC1DA,EAAK,OAAO,SACZuK,EAAY,aAAa,MAAOvK,EAAK,OAAO,QAAQ,YAAY,EAAE,SAAS,CAAC,EAE5EA,EAAK,OAAO,UACZuK,EAAY,aAAa,MAAOvK,EAAK,OAAO,QAAQ,YAAY,EAAE,SAAS,CAAC,EAC5EuK,EAAY,SACR,CAAC,CAACvK,EAAK,OAAO,SACVA,EAAK,OAAO,QAAQ,YAAY,IAAMA,EAAK,OAAO,QAAQ,YAAY,GAElF,IAAIwK,EAAe3J,GAAc,MAAO,yBAAyB,EACjE,OAAA2J,EAAa,YAAYL,CAAY,EACrCK,EAAa,YAAYH,CAAS,EAClCH,EAAiB,YAAYM,CAAY,EACzCP,EAAU,YAAYC,CAAgB,EAC/B,CACH,UAAWD,EACX,YAAaM,EACb,aAAcJ,CAClB,CACJ,CACA,SAASM,GAAc,CACnBd,GAAU3J,EAAK,QAAQ,EACvBA,EAAK,SAAS,YAAYA,EAAK,YAAY,EACvCA,EAAK,OAAO,aACZA,EAAK,aAAe,CAAC,EACrBA,EAAK,cAAgB,CAAC,GAE1B,QAASgI,EAAIhI,EAAK,OAAO,WAAYgI,KAAM,CACvC,IAAIvG,EAAQuI,GAAW,EACvBhK,EAAK,aAAa,KAAKyB,EAAM,WAAW,EACxCzB,EAAK,cAAc,KAAKyB,EAAM,YAAY,EAC1CzB,EAAK,SAAS,YAAYyB,EAAM,SAAS,CAC7C,CACAzB,EAAK,SAAS,YAAYA,EAAK,YAAY,CAC/C,CACA,SAAS2G,GAAgB,CACrB,OAAA3G,EAAK,SAAWa,GAAc,MAAO,kBAAkB,EACvDb,EAAK,aAAe,CAAC,EACrBA,EAAK,cAAgB,CAAC,EACtBA,EAAK,aAAea,GAAc,OAAQ,sBAAsB,EAChEb,EAAK,aAAa,UAAYA,EAAK,OAAO,UAC1CA,EAAK,aAAea,GAAc,OAAQ,sBAAsB,EAChEb,EAAK,aAAa,UAAYA,EAAK,OAAO,UAC1CyK,EAAY,EACZ,OAAO,eAAezK,EAAM,sBAAuB,CAC/C,IAAK,UAAY,CAAE,OAAOA,EAAK,oBAAsB,EACrD,IAAK,SAAU0K,EAAM,CACb1K,EAAK,uBAAyB0K,IAC9BxD,GAAYlH,EAAK,aAAc,qBAAsB0K,CAAI,EACzD1K,EAAK,qBAAuB0K,EAEpC,CACJ,CAAC,EACD,OAAO,eAAe1K,EAAM,sBAAuB,CAC/C,IAAK,UAAY,CAAE,OAAOA,EAAK,oBAAsB,EACrD,IAAK,SAAU0K,EAAM,CACb1K,EAAK,uBAAyB0K,IAC9BxD,GAAYlH,EAAK,aAAc,qBAAsB0K,CAAI,EACzD1K,EAAK,qBAAuB0K,EAEpC,CACJ,CAAC,EACD1K,EAAK,mBAAqBA,EAAK,aAAa,CAAC,EAC7C2K,GAA6B,EACtB3K,EAAK,QAChB,CACA,SAASiH,GAAY,CACjBjH,EAAK,kBAAkB,UAAU,IAAI,SAAS,EAC1CA,EAAK,OAAO,YACZA,EAAK,kBAAkB,UAAU,IAAI,YAAY,EACrD,IAAIC,EAAW8C,GAAgB/C,EAAK,MAAM,EAC1CA,EAAK,cAAgBa,GAAc,MAAO,gBAAgB,EAC1Db,EAAK,cAAc,SAAW,GAC9B,IAAI4K,EAAY/J,GAAc,OAAQ,2BAA4B,GAAG,EACjEgK,EAAYP,GAAkB,iBAAkB,CAChD,aAActK,EAAK,KAAK,aAC5B,CAAC,EACDA,EAAK,YAAc6K,EAAU,qBAAqB,OAAO,EAAE,CAAC,EAC5D,IAAIC,EAAcR,GAAkB,mBAAoB,CACpD,aAActK,EAAK,KAAK,eAC5B,CAAC,EAwBD,GAvBAA,EAAK,cAAgB8K,EAAY,qBAAqB,OAAO,EAAE,CAAC,EAChE9K,EAAK,YAAY,SAAWA,EAAK,cAAc,SAAW,GAC1DA,EAAK,YAAY,MAAQwE,GAAIxE,EAAK,sBAC5BA,EAAK,sBAAsB,SAAS,EACpCA,EAAK,OAAO,UACRC,EAAS,MACTsD,EAActD,EAAS,KAAK,CAAC,EACvCD,EAAK,cAAc,MAAQwE,GAAIxE,EAAK,sBAC9BA,EAAK,sBAAsB,WAAW,EACtCC,EAAS,OAAO,EACtBD,EAAK,YAAY,aAAa,OAAQA,EAAK,OAAO,cAAc,SAAS,CAAC,EAC1EA,EAAK,cAAc,aAAa,OAAQA,EAAK,OAAO,gBAAgB,SAAS,CAAC,EAC9EA,EAAK,YAAY,aAAa,MAAOA,EAAK,OAAO,UAAY,IAAM,GAAG,EACtEA,EAAK,YAAY,aAAa,MAAOA,EAAK,OAAO,UAAY,KAAO,IAAI,EACxEA,EAAK,YAAY,aAAa,YAAa,GAAG,EAC9CA,EAAK,cAAc,aAAa,MAAO,GAAG,EAC1CA,EAAK,cAAc,aAAa,MAAO,IAAI,EAC3CA,EAAK,cAAc,aAAa,YAAa,GAAG,EAChDA,EAAK,cAAc,YAAY6K,CAAS,EACxC7K,EAAK,cAAc,YAAY4K,CAAS,EACxC5K,EAAK,cAAc,YAAY8K,CAAW,EACtC9K,EAAK,OAAO,WACZA,EAAK,cAAc,UAAU,IAAI,UAAU,EAC3CA,EAAK,OAAO,cAAe,CAC3BA,EAAK,cAAc,UAAU,IAAI,YAAY,EAC7C,IAAI+K,EAAcT,GAAkB,kBAAkB,EACtDtK,EAAK,cAAgB+K,EAAY,qBAAqB,OAAO,EAAE,CAAC,EAChE/K,EAAK,cAAc,MAAQwE,GAAIxE,EAAK,sBAC9BA,EAAK,sBAAsB,WAAW,EACtCC,EAAS,OAAO,EACtBD,EAAK,cAAc,aAAa,OAAQA,EAAK,cAAc,aAAa,MAAM,CAAC,EAC/EA,EAAK,cAAc,aAAa,MAAO,GAAG,EAC1CA,EAAK,cAAc,aAAa,MAAO,IAAI,EAC3CA,EAAK,cAAc,aAAa,YAAa,GAAG,EAChDA,EAAK,cAAc,YAAYa,GAAc,OAAQ,2BAA4B,GAAG,CAAC,EACrFb,EAAK,cAAc,YAAY+K,CAAW,CAC9C,CACA,OAAK/K,EAAK,OAAO,YACbA,EAAK,KAAOa,GAAc,OAAQ,kBAAmBb,EAAK,KAAK,KAAKsD,IAAKtD,EAAK,sBACxEA,EAAK,YAAY,MACjBA,EAAK,OAAO,aAAe,EAAE,CAAC,CAAC,EACrCA,EAAK,KAAK,MAAQA,EAAK,KAAK,YAC5BA,EAAK,KAAK,SAAW,GACrBA,EAAK,cAAc,YAAYA,EAAK,IAAI,GAErCA,EAAK,aAChB,CACA,SAAS+G,GAAgB,CAChB/G,EAAK,iBAGN2J,GAAU3J,EAAK,gBAAgB,EAF/BA,EAAK,iBAAmBa,GAAc,MAAO,oBAAoB,EAGrE,QAAS3B,EAAIc,EAAK,OAAO,WAAYd,KAAM,CACvC,IAAI+K,EAAYpJ,GAAc,MAAO,4BAA4B,EACjEb,EAAK,iBAAiB,YAAYiK,CAAS,CAC/C,CACA,OAAAe,EAAe,EACRhL,EAAK,gBAChB,CACA,SAASgL,GAAiB,CACtB,GAAKhL,EAAK,iBAGV,KAAIiL,EAAiBjL,EAAK,KAAK,eAC3BkL,EAAW7L,GAAeW,EAAK,KAAK,SAAS,SAAS,EACtDiL,EAAiB,GAAKA,EAAiBC,EAAS,SAChDA,EAAW7L,GAAe6L,EAAS,OAAOD,EAAgBC,EAAS,MAAM,EAAGA,EAAS,OAAO,EAAGD,CAAc,CAAC,GAElH,QAAS/L,EAAIc,EAAK,OAAO,WAAYd,KACjCc,EAAK,iBAAiB,SAASd,CAAC,EAAE,UAAY;AAAA;AAAA,UAAuDgM,EAAS,KAAK,yCAAyC,EAAI;AAAA;AAAA,QAExK,CACA,SAAStE,GAAa,CAClB5G,EAAK,kBAAkB,UAAU,IAAI,UAAU,EAC/C,IAAI6G,EAAchG,GAAc,MAAO,uBAAuB,EAC9DgG,EAAY,YAAYhG,GAAc,OAAQ,oBAAqBb,EAAK,KAAK,gBAAgB,CAAC,EAC9F,IAAI8G,EAAcjG,GAAc,MAAO,iBAAiB,EACxD,OAAAgG,EAAY,YAAYC,CAAW,EAC5B,CACH,YAAaD,EACb,YAAaC,CACjB,CACJ,CACA,SAAStG,GAAY2K,EAAOC,EAAU,CAC9BA,IAAa,SAAUA,EAAW,IACtC,IAAI/E,EAAQ+E,EAAWD,EAAQA,EAAQnL,EAAK,aACvCqG,EAAQ,GAAKrG,EAAK,sBAAwB,IAC1CqG,EAAQ,GAAKrG,EAAK,sBAAwB,KAE/CA,EAAK,cAAgBqG,GACjBrG,EAAK,aAAe,GAAKA,EAAK,aAAe,MAC7CA,EAAK,aAAeA,EAAK,aAAe,GAAK,EAAI,GACjDA,EAAK,cAAgBA,EAAK,aAAe,IAAM,GAC/CoC,GAAa,cAAc,EAC3B+D,GAAiB,GAErBa,EAAU,EACV5E,GAAa,eAAe,EAC5BuI,GAA6B,EACjC,CACA,SAASjK,GAAM2K,EAAoBC,EAAW,CAc1C,GAbID,IAAuB,SAAUA,EAAqB,IACtDC,IAAc,SAAUA,EAAY,IACxCtL,EAAK,MAAM,MAAQ,GACfA,EAAK,WAAa,SAClBA,EAAK,SAAS,MAAQ,IACtBA,EAAK,cAAgB,SACrBA,EAAK,YAAY,MAAQ,IAC7BA,EAAK,cAAgB,CAAC,EACtBA,EAAK,sBAAwB,OACzBsL,IAAc,KACdtL,EAAK,YAAcA,EAAK,aAAa,YAAY,EACjDA,EAAK,aAAeA,EAAK,aAAa,SAAS,GAE/CA,EAAK,OAAO,aAAe,GAAM,CACjC,IAAIsC,EAAKS,GAAgB/C,EAAK,MAAM,EAAGwD,EAAQlB,EAAG,MAAOmB,EAAUnB,EAAG,QAASoB,EAAUpB,EAAG,QAC5F+B,EAASb,EAAOC,EAASC,CAAO,CACpC,CACA1D,EAAK,OAAO,EACRqL,GACAjJ,GAAa,UAAU,CAC/B,CACA,SAASzB,IAAQ,CACbX,EAAK,OAAS,GACTA,EAAK,WACFA,EAAK,oBAAsB,QAC3BA,EAAK,kBAAkB,UAAU,OAAO,MAAM,EAE9CA,EAAK,SAAW,QAChBA,EAAK,OAAO,UAAU,OAAO,QAAQ,GAG7CoC,GAAa,SAAS,CAC1B,CACA,SAASrB,IAAU,CACXf,EAAK,SAAW,QAChBoC,GAAa,WAAW,EAC5B,QAASlD,EAAIc,EAAK,UAAU,OAAQd,KAChCc,EAAK,UAAUd,CAAC,EAAE,OAAO,EAG7B,GADAc,EAAK,UAAY,CAAC,EACdA,EAAK,YACDA,EAAK,YAAY,YACjBA,EAAK,YAAY,WAAW,YAAYA,EAAK,WAAW,EAC5DA,EAAK,YAAc,eAEdA,EAAK,mBAAqBA,EAAK,kBAAkB,WACtD,GAAIA,EAAK,OAAO,QAAUA,EAAK,kBAAkB,WAAY,CACzD,IAAIoH,EAAUpH,EAAK,kBAAkB,WAErC,GADAoH,EAAQ,WAAaA,EAAQ,YAAYA,EAAQ,SAAS,EACtDA,EAAQ,WAAY,CACpB,KAAOA,EAAQ,YACXA,EAAQ,WAAW,aAAaA,EAAQ,WAAYA,CAAO,EAC/DA,EAAQ,WAAW,YAAYA,CAAO,CAC1C,CACJ,MAEIpH,EAAK,kBAAkB,WAAW,YAAYA,EAAK,iBAAiB,EAExEA,EAAK,WACLA,EAAK,MAAM,KAAO,OACdA,EAAK,SAAS,YACdA,EAAK,SAAS,WAAW,YAAYA,EAAK,QAAQ,EACtD,OAAOA,EAAK,UAEZA,EAAK,QACLA,EAAK,MAAM,KAAOA,EAAK,MAAM,MAC7BA,EAAK,MAAM,UAAU,OAAO,iBAAiB,EAC7CA,EAAK,MAAM,gBAAgB,UAAU,GAEzC,CACI,iBACA,wBACA,sBACA,sBACA,uBACA,uBACA,WACA,SACA,mBACA,iBACA,iBACA,OACA,gBACA,SACA,mBACA,iBACA,aACA,WACA,gBACA,oBACA,mBACA,eACA,eACA,0BACA,sBACA,qBACA,yBACA,mBACA,QACJ,EAAE,QAAQ,SAAUR,EAAG,CACnB,GAAI,CACA,OAAOQ,EAAKR,CAAC,CACjB,MACU,CAAE,CAChB,CAAC,CACL,CACA,SAAS+L,GAAeC,EAAM,CAC1B,OAAOxL,EAAK,kBAAkB,SAASwL,CAAI,CAC/C,CACA,SAAS/F,GAAc7C,EAAG,CACtB,GAAI5C,EAAK,QAAU,CAACA,EAAK,OAAO,OAAQ,CACpC,IAAIyL,EAAgB7G,GAAehC,CAAC,EAChC8I,EAAoBH,GAAeE,CAAa,EAChDE,EAAUF,IAAkBzL,EAAK,OACjCyL,IAAkBzL,EAAK,UACvBA,EAAK,QAAQ,SAASyL,CAAa,GAClC7I,EAAE,MACCA,EAAE,KAAK,UACN,CAACA,EAAE,KAAK,QAAQ5C,EAAK,KAAK,GACvB,CAAC4C,EAAE,KAAK,QAAQ5C,EAAK,QAAQ,GACrC4L,EAAY,CAACD,GACb,CAACD,GACD,CAACH,GAAe3I,EAAE,aAAa,EAC/BiJ,EAAY,CAAC7L,EAAK,OAAO,qBAAqB,KAAK,SAAUwL,GAAM,CACnE,OAAOA,GAAK,SAASC,CAAa,CACtC,CAAC,EACGG,GAAaC,IACT7L,EAAK,OAAO,YACZA,EAAK,QAAQA,EAAK,OAAO,MAAO,GAAOA,EAAK,OAAO,SAC7CA,EAAK,OAAO,UACZA,EAAK,OAAO,UAAU,EAE5BA,EAAK,gBAAkB,QACvBA,EAAK,gBAAkB,QACvBA,EAAK,cAAgB,QACrBA,EAAK,MAAM,QAAU,IACrBA,EAAK,MAAM,QAAU,QACrB2C,EAAW,EAEf3C,EAAK,MAAM,EACPA,EAAK,QACLA,EAAK,OAAO,OAAS,SACrBA,EAAK,cAAc,SAAW,GAC9BA,EAAK,MAAM,EAAK,EAE5B,CACJ,CACA,SAASS,GAAWqL,EAAS,CACzB,GAAI,GAACA,GACA9L,EAAK,OAAO,SAAW8L,EAAU9L,EAAK,OAAO,QAAQ,YAAY,GACjEA,EAAK,OAAO,SAAW8L,EAAU9L,EAAK,OAAO,QAAQ,YAAY,GAEtE,KAAI+L,EAAaD,EAASE,EAAYhM,EAAK,cAAgB+L,EAC3D/L,EAAK,YAAc+L,GAAc/L,EAAK,YAClCA,EAAK,OAAO,SACZA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAY,EACrDA,EAAK,aAAe,KAAK,IAAIA,EAAK,OAAO,QAAQ,SAAS,EAAGA,EAAK,YAAY,EAEzEA,EAAK,OAAO,SACjBA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAY,IACrDA,EAAK,aAAe,KAAK,IAAIA,EAAK,OAAO,QAAQ,SAAS,EAAGA,EAAK,YAAY,GAE9EgM,IACAhM,EAAK,OAAO,EACZoC,GAAa,cAAc,EAC3B+D,GAAiB,GAEzB,CACA,SAASnF,GAAUuD,EAAM0H,EAAU,CAC/B,IAAI3J,EACA2J,IAAa,SAAUA,EAAW,IACtC,IAAIC,EAAclM,EAAK,UAAUuE,EAAM,OAAW0H,CAAQ,EAC1D,GAAKjM,EAAK,OAAO,SACbkM,GACApJ,GAAaoJ,EAAalM,EAAK,OAAO,QAASiM,IAAa,OAAYA,EAAW,CAACjM,EAAK,cAAc,EAAI,GAC1GA,EAAK,OAAO,SACTkM,GACApJ,GAAaoJ,EAAalM,EAAK,OAAO,QAASiM,IAAa,OAAYA,EAAW,CAACjM,EAAK,cAAc,EAAI,EAC/G,MAAO,GACX,GAAI,CAACA,EAAK,OAAO,QAAUA,EAAK,OAAO,QAAQ,SAAW,EACtD,MAAO,GACX,GAAIkM,IAAgB,OAChB,MAAO,GAEX,QADIxB,EAAO,CAAC,CAAC1K,EAAK,OAAO,OAAQmM,GAAS7J,EAAKtC,EAAK,OAAO,UAAY,MAAQsC,IAAO,OAASA,EAAKtC,EAAK,OAAO,QACvGd,GAAI,EAAG2K,EAAI,OAAQ3K,GAAIiN,EAAM,OAAQjN,KAAK,CAE/C,GADA2K,EAAIsC,EAAMjN,EAAC,EACP,OAAO2K,GAAM,YACbA,EAAEqC,CAAW,EACb,OAAOxB,EACN,GAAIb,aAAa,MAClBqC,IAAgB,QAChBrC,EAAE,QAAQ,IAAMqC,EAAY,QAAQ,EACpC,OAAOxB,EACN,GAAI,OAAOb,GAAM,SAAU,CAC5B,IAAIuC,GAASpM,EAAK,UAAU6J,EAAG,OAAW,EAAI,EAC9C,OAAOuC,IAAUA,GAAO,QAAQ,IAAMF,EAAY,QAAQ,EACpDxB,EACA,CAACA,CACX,SACS,OAAOb,GAAM,UAClBqC,IAAgB,QAChBrC,EAAE,MACFA,EAAE,IACFqC,EAAY,QAAQ,GAAKrC,EAAE,KAAK,QAAQ,GACxCqC,EAAY,QAAQ,GAAKrC,EAAE,GAAG,QAAQ,EACtC,OAAOa,CACf,CACA,MAAO,CAACA,CACZ,CACA,SAAS7B,GAAS2C,EAAM,CACpB,OAAIxL,EAAK,gBAAkB,OACfwL,EAAK,UAAU,QAAQ,QAAQ,IAAM,IACzCA,EAAK,UAAU,QAAQ,oBAAoB,IAAM,IACjDxL,EAAK,cAAc,SAASwL,CAAI,EACjC,EACX,CACA,SAAS1F,GAAOlD,EAAG,CACf,IAAI+I,EAAU/I,EAAE,SAAW5C,EAAK,OAC5BqM,EAAerM,EAAK,OAAO,MAAM,QAAQ,IAAMsM,GAAW,EAC1DX,GACAU,GACA,EAAEzJ,EAAE,eAAiB2I,GAAe3I,EAAE,aAAa,IACnD5C,EAAK,QAAQA,EAAK,OAAO,MAAO,GAAM4C,EAAE,SAAW5C,EAAK,SAClDA,EAAK,OAAO,UACZA,EAAK,OAAO,UAAU,CAEpC,CACA,SAASwF,GAAU5C,EAAG,CAClB,IAAI+B,EAAcC,GAAehC,CAAC,EAC9B+I,EAAU3L,EAAK,OAAO,KACpBF,EAAQ,SAAS6E,CAAW,EAC5BA,IAAgB3E,EAAK,OACvBuM,EAAavM,EAAK,OAAO,WACzBwM,EAAexM,EAAK,SAAW,CAACuM,GAAc,CAACZ,GAC/Cc,EAAqBzM,EAAK,OAAO,QAAU2L,GAAW,CAACY,EAC3D,GAAI3J,EAAE,UAAY,IAAM+I,EAAS,CAC7B,GAAIY,EACA,OAAAvM,EAAK,QAAQA,EAAK,OAAO,MAAO,GAAM2E,IAAgB3E,EAAK,SACrDA,EAAK,OAAO,UACZA,EAAK,OAAO,UAAU,EAC5BA,EAAK,MAAM,EACJ2E,EAAY,KAAK,EAGxB3E,EAAK,KAAK,CAElB,SACSuL,GAAe5G,CAAW,GAC/B6H,GACAC,EAAoB,CACpB,IAAIC,GAAY,CAAC,CAAC1M,EAAK,eACnBA,EAAK,cAAc,SAAS2E,CAAW,EAC3C,OAAQ/B,EAAE,QAAS,CACf,IAAK,IACG8J,IACA9J,EAAE,eAAe,EACjBD,EAAW,EACXgK,GAAc,GAGdhH,GAAW/C,CAAC,EAChB,MACJ,IAAK,IACDA,EAAE,eAAe,EACjB+J,GAAc,EACd,MACJ,IAAK,GACL,IAAK,IACGhB,GAAW,CAAC3L,EAAK,OAAO,aACxB4C,EAAE,eAAe,EACjB5C,EAAK,MAAM,GAEf,MACJ,IAAK,IACL,IAAK,IACD,GAAI,CAAC0M,IAAa,CAACf,EAAS,CACxB/I,EAAE,eAAe,EACjB,IAAI+F,EAAgBtG,EAAwB,EAC5C,GAAIrC,EAAK,gBAAkB,SACtBuM,IAAe,IACX5D,GAAiBE,GAASF,CAAa,GAAK,CACjD,IAAIiE,GAAUhK,EAAE,UAAY,GAAK,EAAI,GAChCA,EAAE,SAGHA,EAAE,gBAAgB,EAClBpC,GAAYoM,EAAO,EACnBnE,EAAWZ,EAAqB,CAAC,EAAG,CAAC,GAJrCY,EAAW,OAAWmE,EAAO,CAMrC,CACJ,MACS5M,EAAK,aACVA,EAAK,YAAY,MAAM,EAC3B,MACJ,IAAK,IACL,IAAK,IACD4C,EAAE,eAAe,EACjB,IAAIyD,EAAQzD,EAAE,UAAY,GAAK,EAAI,GAC9B5C,EAAK,eACN2E,EAAY,KAAO,QACnBA,IAAgB3E,EAAK,OACrB2E,IAAgB3E,EAAK,SACjB4C,EAAE,SACFA,EAAE,gBAAgB,EAClBnC,GAAWT,EAAK,YAAcqG,CAAK,EACnCoC,EAAWZ,EAAqB,CAAC,EAAG,CAAC,GAE/B6E,IACNjE,EAAW,OAAWpC,EAAQ,CAAC,EAE9B1B,IAAgB3E,EAAK,mBAC1BS,GAAWT,EAAK,YAAcqG,CAAK,EAE9BrG,EAAK,OAAO,aACb,CAAC0M,IAAa1M,EAAK,aACnBA,EAAK,YAAY,MAAM,EAC3B2C,EAAWC,CAAC,EACZ5C,EAAK,iBAAiB,GAE1B,MACJ,IAAK,GACD,GAAI0M,GAAW,CACX,IAAIG,EAAQ,CACR7M,EAAK,YACLA,EAAK,cACLA,EAAK,cACLA,EAAK,IACT,EACK,OAAOA,EAAK,cAAc,EAC1B,OAAO,SAAU8M,GAAG,CAAE,OAAOA,EAAG,CAAC,EAClC5N,GAAI2N,EAAM,QAAQlI,CAAW,EACjC,GAAIzF,KAAM,GAAI,CACV,IAAIqH,GAASsG,EAAM3N,IAAK0D,EAAE,SAAW,GAAK,EAAE,EAC5CA,EAAE,eAAe,GAChB2D,IAAUvG,EAAK,QAAQ,MAAM,CAClC,CACJ,KACS,CAACA,EAAK,OAAO,YAClBA,EAAK,eACLA,EAAK,cAAc,SAAS2E,CAAW,GACvC/B,EAAE,WACFA,EAAE,eAAe,EACjB5C,EAAK,OAAO,MAAM,GAEtB,MACJ,QACI,KACR,CACJ,CACA,GAAIA,EAAK,OAAS,QAAa2E,IAAgB3E,EAAK,KAChD,OAAQ4C,EAAE,IAAK,CACX,KAAK5C,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAC/B,KAAKA,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,EACzCA,EAAK,KAAK,YAAcA,EAAK,KAAK,KAAK,CAAC,EACxCkD,EAAmB,EACnBhC,GAAY,EACZ,MACJ,KAAKlB,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAC/B,KAAKA,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,EACzCA,EAAK,KAAK,YAAcA,EAAK,KAAK,KAAK,CAAC,EACxCkD,EAAmB,EACnBhC,GAAY,EACZ,KACR,EAEAyK,GAAWJ,GAAe5G,CAAW,IACrCvC,GAAa,YAAaQ,CAAC,CAEnC,CACA,SAAShC,GAAY4K,EAAMuB,EAAW,CAElC,GADIA,IAAc,SAAUA,EAAY,iBACpC,EAAA/M,EAAK,cAAc,SAAW,GAC7BwL,IACI,CAACA,EAAK,UAAU,SAASuB,CAAS,GAC/BvB,EAAK,UAAU,SAAS,oBAAoB,IAOxD,SALIwB,EAAYxB,EACVA,EAAK,QAAQ,QAAQ,EACrBxL,EAAK,KAAK,kBAAkB,QAAQ,QAAQ,EAAGiN,EAAcjN,EAAK,UAAUA,EAAK,cAAc,CAAC,EAAG,OAAW,EAAI,EAAE,QAAQ,EAAGkN,EAAiB,KAAK,IAAIF,EAAWhN,EAAK,cAAc,CAAC,EAAE,QAAQ,CAAC,EAAGmN,EAAe,KAAK,IAAIH,EAAWhN,EAAK,cAAc,CAAC,EAAE,QAAQ,CAAC,EAC1QoN,GAAmB,GACnBC,EAAW,EAAGC,GAAW,EACpBtO,EAAIkO,EAAgBlO,EAAImO,EAAcnO,GAAKuO,GAAS,IACpDvM,GAAU,IAAI,KAAKhC,CAAC,EAAG,EAAI,IAC5BoO,GACIA,IAAqBpO,EAAIkO,GAAkBlO,EAAImO,EAC/CnO,EAAIiO,IAAgB,CAACI,GAAYrO,EAAIqO,GACrCA,EAAWrO,EACNA,EAAIiO,IAAgB,CAACK,IAAYtO,EAAIsO,MAC1CA,GAAWtO,IAGvB,IAAIwO,EAAiB,MAAM,KAAKxN,EAAK,WAAW,iBAAiB,kBAAoBA,EAAK,OAAO,WAAa,QAAU+M,CAAS,CAAC,EAClIS,EAAe,QAAQ,SAAUC,GAAS,CACtC,IAAIlJ,GAAOkJ,GAAQ,QACfC,GAAYnJ,GAAK,QAAQ,EACzBoJ,GAAcN,EAAW,GAAKK,GAAYL,GACzCC,GAAW,GAAKI,GAAYJ,GACjC,GAAIK,GAAY,CACZF,GAAQ,UAAU,IAAI,YAAY,EAClC,CAAC,UAAW,aAAc,UAAU,EAAE,QAAQ,SAAUtF,GAAG,CACvDsF,GAAQ,UAAU,OAAOtF,EAAC,CAC9B,CAAC,EACD,MACJ,SACSiF,IAAoB,CAACO,GAC1B,OACJ,CAAC,aAAc,UAAW,WAAY,YAAY,EAAE,QAAQ,SAAUxF,GAAG,CACrEsF,GAAQ,UAAU,OAAOtF,EAAC,CAC9B,CAAC,EACGqD,IAAS,SACTA,EAAK,UAAU,IAAIwB,GAAahN,EAAK,cAAc,CAAC,EAAE,QAAQ,EACxD,aACA,UAAU,EACZiN,EAAcD,GAAaU,KAAcT,EACzCQ,GAAQ,UAAU,IAAI,YAAY,EAC7BR,EAAcD,GAAaU,KAAcT,GAC9CQ,GAAQ,UAAU,IAAI,UAAU,EAChCC,IAAaL,IACZC,KAAa,GAAKI,IAAaJ,KAChCM,GAAUF,GAAWT,EAAaD,CAAS,GAC3CS,GAAQ,UAAU,IAAI,SAAS,EAE3C,CAAC,EACL,CACA,SAASlI,IAAW,CACZvF,EAAK,QAAU,CAACA,EAAK,OAAO,QAAU,CAACA,EAAK,OAAO,QACnDO,GAAiB,CACzB,CACA,SAASY,GAAKyB,EAAGiL,EAAiB,CAE9B,GADIA,IAAoB,SAAUA,EAAkB7N,EAAK,kBACrDA,EAAK,WAAa,GAAM,CACxB,GAAI4C,EAAG,CACHA,EAAE,eAAe,EACjB,IAAI+B,EAAcC,GAAehC,CAAC,EAC9B+B,GACAA,EAAY,KAAK,CAEzB,CACI3E,EAAK,cAAgB,SACrBA,EAAK,YAAY,MAAM,EACvBA,EAAK,YAAY,MAAM,GAE3BoC,GAAa,QAAQ,EACrB,MACJ,SACSpC,EAAK,OAAO,UAAYA,EAAK,OAAO,OACzC,OAEJ,IAAI8N,EAAU9N,EAAK,OACnBA,EAAK,OAAS,GACT8N,IACD9N,EAAK,kBAAkB,UAAU,IAAI,MAAM,EAC3CA,EAAK,OAAO,UAAU,IAAI,QAAQ,EAClCoC,GAAa,QAAQ,EACrB7B,GAAiBsN,CAAe,GAEhC7N,EAAK,OAAO,aAAe,IAAQA,EAAK,OAAO,aAAe,IAC1DA,EAAK,OAAO,aAAe,KAC1B4C,IAAM,QACH,CAAC5C,EAAK,cAAc,SAAS4C,EAAE,aAAa,IAChD,WAAW,UAAY,CAAE,OAAO5C,EAAK,YAAY,OAAO,CAAG,EAAG,EAAE,CAG5E,CACA,SAAS+N,GAAiBC,EAAM,CAC5B,OAAO,SAAUzJ,EAAM,CACnB,IAAID,EAAWtE,EAAK,OAAO,IAAMgO,EAAO,MAAM,EAAIhO,EAAK,UAAUuE,EAAMvE,EAAK,OAAO,UAAU,EACzFiO,EAAiBjO,EAAK,OAAO,KAAOgO,IAAS,MAAQ,MAAQ,OAAS,MAAM,EAC5E1J,IAAY,SACZtE,EAAKgO,IAAS,MAAQ,iBAAmB,gBAAgB,EACrD1J,EAAQ,SAAS,EAAI,GACjBA,EAAQ,WAAW,EAAI,GACvBA,EAAQ,WAAW,EAAI,GAE/BtE,EAAK,gBACLA,EAAK,cAAgBA,EAAK,cAAc,OAAO,SAAU6J,EAAG,CAAE,OAAO7I,GAAU6I,CAAC,CAAG,CAAC,EAChF,CAAC7J,EAAK,cAAc,QAAUgO,IAAS,OACvC1N,EAAiBgE,CAAO,EAC5BpD,GAAY,GAEZlB,EAAK,gBACLoB,GAAO,EACHkD,IAAY,OACZtE,EAAK,mBAAmBgO,CAAI,EAAI1J,EAAQ,YAAY,EAAE,SAAS,EAE/DtE,EAAK,mBAAmB,gBAAgBgO,CAAI,EAChDhO,EAAK,mBAAmB,SACpB,CAAC,CAACiO,GACE3J,IAAY,QACZ2J,EAAe,YAAY,IAAM3J,EAAQ,YAAY,EAErE,CACJ,CACA,SAAS1C,IAAc,CACnB,IAAIsM,EAAW,CACX,OACA,cACA,aACA,sBACA,aACA,YACA,aACA,aACA,WACA,wBACA,SACA,SACA,gBACA,eACJ,EACIC,EAAapP,GAASA,GAAS,CAAC,EAAG,KAAK,MAAM,KAAK,UAAUe,EAAQ,SAAW,CAAC,CAAC,CAAC,CAAC,EAAGC,CAAc,EACrGqO,EAAU,CAAC,EACfpO,EAAK,OAAO,UAAYmO,EAAW,UACnCnO,EAAK,OAAO,WAAamO,EAAW,WACpC,OAAO,eAAenO,EAAK,OAAQ,SAAU,CACzC,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,OAAS,EAC/C,IAAK,SAAUqO,EAAO,CAClBrO,EAAK,OAAO,QAAUsO,GAAeD,CAAK,CAC9C,CACJ,CAAC,EACD,OAAO,eAAerO,EAAK,OAAQ,UAAW,CAC1C,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,QAAU,EAChD,IAAK,SAAUqO,EAAO,CAClBrO,EAAK,OAAO,SAAWsO,GAAeD,CAAK,CAC/C,CACJ,CAAC,EACD,IAAIE,EAAWJ,EAAW,OAAS,OACnC,GAAI,CAACA,EAAW,aAAeA,EAAW,YAAcI,GAAW,CAC/D,IAAIC,EAAoBtO,GAAU,cAAc,YAAcD,GAAe,WAC7EmO,EAAQ,WACJD,EAAW,YAAcI,EACnB,OAASJ,EAAW,cAAgB,KAAO,IAC3CK,EAAoB,QAAUL,EAAW,cAAgB,KAAO,GAC9E,CACA,GAAIA,EAAW,WACVA,EAAW,YAAcI,IAC1B,CAACJ,EAAW,UAAW,CACvB,IAAIM,EAAmBvO,GAAU,cAAc,WAAaD,GAAe,UAC3EmO,EAAQ,UACJD,EAAW,YAAcI,EACnB,OAASJ,EAAW,cAAgB,OAAS,MAC7CM,GAAoB,QAAUN,EAAW,cAAgB,KAAO,IAAM,KACpF,CACA,OAAO,eAAenO,EAAK,OAAQ,UAAW,CAC1C,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,QAAU,EAChD,IAAK+N,GAAiB,KAAK,CAC/B,CAAC,EACD,OAAO,eAAe/N,EAAK,OAAQ,UAAW,CAC1C,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,QAAU,EAChD,IAAK+N,GAAiB,KAAK,CAC/B,CAAC,EACD,IAAIW,GAAmB,SAAUV,EAAM,CAAE,OAAO,SAAUW,GAAK,CAC3D3O,EAAK,OAAOgO,IAAS,MAAQ,WAAa,UAAU,EAAIhO,EAAK,UAAU2O,GAAK,OAAO,CACvF,CAAG,EACH,OAAO,eAAe3O,EAAK,OAAQ,UAAW,CAC1C,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,QAAU,EAChD,IAAK0O,GAAiB,KAAK,CAC/B,CAAC,EACD,OAAO,eAAe1O,EAAK,OAAQ,UAAW,CAC1C,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,QAAU,EAChD,IAAK0O,GAAiB,KAAK,CAC/B,CAAC,EACGP,EAAW,OAAS,SACpBnO,EAAK,OAAO,WAAa,GACzBA,EAAK,OAAO,WAAa,IAE7B,OAAO,OAAOA,EAAK,OAAQoO,EAASD,CAAU,EAC9C,QAASjP,EAAI,EAAGA,EAAIgP,EAAS,OAAQhP,IACjCc,EAAK,OAAOkO,EAAShP,CAAC,CAAC,EACnBc,EAAK,OAAOkO,EAAShP,CAAC,CAAC,IAAM,IACzBc,EAAK,OAAOkO,EAAShP,CAAC,CAAC,IAAM,OACzC0P,GAAM,OAAO,SAAUC,EAAM,CAAE,OAAO7O,EAAK,OAAO6O,CAAI,IAAM,MAAW,CAAC,EAAE,QAAQ,SAAUA,EAAM,CAC9F7O,EAAK,OAAO6O,CAAI,EAAIC,GAAS9O,EAAK,OAAO6O,CAAI,GAAK,CAAC,CAAC,EAAE,IAAItM,CAAc,CAC5E,CAAC,EACDvC,EAAK,SACD,CAACA,EAAK,OAAO,eACT,CAACA,EAAK,OAAO,QACbA,EAAK,OAAO,OAAS,UACrB,CAACA,EAAK,OAAO,QAAQ,QACrB,CAACA,EAAK,OAAO,QACb,CAACA,EAAK,OAAO,aACb,iEAAiE,KAAK,UAAU,SAAS,EACjG,QAASd,EAAI,EAAGA,EAAIc,EAAK,OAAO,QAAQ,OAAQd,IAAK,CACjD,IAAI6P,GAAa/O,EAAK,OAAO,QAAQd,CAAC,EAAEc,CAAI,GAAK,CAAC,EAClD,QAASgP,KAAOD,GACRH,GAAM,QAAQI,CAAG,EAAI,GACrBhP,EAAK,OAAOgP,CAAG,EAAIF,GAASC,GAAWC,CAAG,CAAC,EACtC,IAAIzM,CAAc,EAClB,OAAOvC,EAAK,OAAOgP,CAAG,CAAC,EAEvB,OAAOb,EAAWa,CAAG,EAAM,MAChChP,EAAK,OAAOgP,CAAG,EAAID,GAAWC,CAAG,EAE7C,CACKb,EAAW,gBACZnO,EAAK,OAAO,cACRiP,GAAa,EAAE,UAAY,IAAMjP,EAAK,OAAO,eAErDoC,GAAa,eAAe,CAChC,CACA,SAAS6M,IAAe,CACpB,OAAOjP,EAAK,OAAO,KACbF,EAAQ,cAAc,cAAc,EACpCA,CACV,CACA,SAAS+B,IAAc,CACf,OAAO7B,EAAK,OAAO,QAAW,UAC9B,OAAOE,GAAU,MAAMF,EAAK,OAAO,MAAM,EAAM,KAC/CA,EAAK,OAAO,aAAa,IAAI,MAAM,6BAA+BA,EAAK,OAAO,MAAM,CAAC,EACzFA,EAAK,KAAOjB,GAASA,GAAS,CAAC,EAAGmB,GAAU,MAAM,OAAO,EAAI,OAAOF,EAAK,OAAO,QAAW,SACrFA,EAAK,OAAO,OACZA,EAAK,OAAO,SAAW,UACnBE,GAAU,MAAMF,EAAK,OAAO,MAAM,EAClC,MAAU,EACpBkP,GAAW,EAAI,IAAMlP,EAAK,KAAK,SAAS,UAAU,KAAK,GAAG,EAAI,IAC9DkP,GAAW,EAAI,IAAMlP,EAAK,KAAK,SAAS,SAAS,KAAK,GAAG,EAAI,IAC7DkP,GAAW,EAAI,IAAMlP,EAAK,KAAK,OAAO,UAAU,KAAK,GAAG,EAAI,IAC5DkP,GAAW,EAAI,IAAMlP,EAAK,KAAK,OAAO,SAAS,KAAK,GAAG,EAAI,IAC3DkP,GAAW,EAAI,IAAMlP,EAAK,KAAK,KAAK,CAAC,EAAI,IAAMA,EAAK,KAAK,KAAK,CAAC,EAAI,IAAMA,EAAK,KAAK,KAAK,CAAC,EAAE,YAAY,EAAI,IAAMA,EAAK,KAAK,KAAK,CAAC,EAAE,YAAY,EAAI,IACnJ,IAAImO,EAAapP,GAASA,GAAS,CAAC,EAAGgB,CAAc,EAAG,KAAK,MAAM,KAAK,UAAUD,EAAQ,SAAW,CAAC,CAAC,CAAC,CAAC,EACrGqO,EAAW,YAAc,QACzBjO,GAAU,cAAc,YAAc,SACtCF,EAAK,OAAO,UAAYA,EAAK,KAAK,WAEtCA,EAAK,WAAamP,GAAoBnP,CAAI,EAC1CA,EAAK,UAAYI,GAAiB,CAAE,OAAQJ,EAAK,OAAQ,KAAMA,EAAK,IAAK,CAAC,CAC9E,CACA,SAASO,GAAiB6O,EAAuB,CAC7C,GAAI,OAAOpP,EAAK,OAAO,UAAa,WAChC,OAAO,KAAKA,EAAK,OAAO,SAASA,EAAMoP,CAAqB,EAEhE,GAAIpP,EAAK,oBAAsB,OAE/B,CAAAoC,GAAa,uBAAuB,EACpC,IAAIyL,EAAkBuB,GAAyBpP,EAAK,iBAChDqP,EAAiB,MAAM,UAAU,OAAO,KAAKrP,EAAK,kBAAkB,SAAW,SAAUsP,GAAKC,GAAO,CAAE,OAAOD,GAAMC,GAAM,YAAc,EAAI,CAAC,EAAGC,EAAgBxP,EAAK,kBAAkB,YAAayP,EAAYzP,EAAK,OAAO,SAAS,MAAM,GAAG,EAAG0P,EAAoBD,EAAU,CAAC,EAAGE,GAAsBF,EAAU,OAAS,EAAIA,EAAU,CAAC,EAAI,KAAMG,EAAc/B,EAAgB,sBAAsB,EAAGgC,GAAqB,OAAO,YAAcD,EAAY,OAAQE,EAAYJ,IAAsB,SAC3eA,IAAsB,SACnBG,GAAqBR,GACrBO,EAAY,IAAMP,EACtBU,EAAM,OAAO,YACbH,EAAY,KACVE,EAA+C,CAACT,EAAiB,EAArDxB,EAAgB,aAAe,GAGjD,GAFA3G,GAAYlH,EAAK,kBAAmB,WAAY,CAAC8P,CAAS,EAC1D5I,GAAYlH,EAAK,kBAAmB,cAAe8P,CAAS,EACxD,CAAA9P,EAAK,OAAO,OAEhB,KAAIgQ,GAAO,OAAO,YAAcJ,EAAY,KACxCK,GAAW,GACXC,GAAU,GACVP,KAAwB,UACxBK,KAASR,EAAgBI,EAAY,OAAS,EAC9CK,GAAW,IAENN,KAAwB,UAC7BK,IAAQR,EAAgBI,EAAY,MACpCM,GAAU,IAEdhJ,GAAYlH,EAAK,kBAAmB,YAAa,CAACiQ,IAAY,CAACC,EAAO,EACtEhJ,GAAYlH,EAAK,kBAAmB,cAAeiQ,EAAQ,EAC3D/I,GAAYlH,EAAK,kBAAmB,aAAckQ,EAAO,EACzD,IAAIC,GAAQ,OAAO,SAAS,KAAK,aAC5B,OAAO,YAAcP,EAAY,OAClCQ,GAAYJ,GAAOR,EAAgB,OAAO,SAAS,KAAK,YACxDa,GAAaF,GAAQX,EAAgB,OAAO,SAAS,KAAK,YAE9D,GADAtI,GAAYlH,EAAK,kBAAmB,YAAaoQ,EAAS,EACtD,CAAApQ,EAAK,OAAO,OAGhB,GADAA,EAAK,kBAAkB,MAAM,IAAM+P,EAAM,KACrC,CAACK,GACDpQ,EAAK,kBAAkB,MAAM,KAAOgQ,GAAO,KAC3ChQ,EAAK,kBAAkB,MAAM,MAAQ,eAEhC,CAACqQ,GACNrQ,EAAK,kBAAkB,MAAM,KAAO,OACpCA,EAAK,kBAAkB,MAAM,MAAQmQ,GAAQ,SAE5C,CACD,IAAIG,GAAMC,GAAsB,EAChC,GAAID,KAAQ,OACR,OACJ,IAAIE,GAAY,OAAO,SAAS,KAAK,YACjCC,GAAa,KAAK,IAAI,EAAGD,GAAY,EAAIhB,EAAgB,CAAC,EAC1DkB,GAAe,wCACfC,GAAc,uCACdC,GAAcN,GAAI,SAAS,OAC3BO,GAAc,SAAWjB,EAAY,KAAO,kBAChD1I,GAAYlH,EAAK,kBAAmB,YAAa,EAAK,EACtDkH,GAAYlH,EAAK,kBAAmB,aAAc,EAAI,EACtDsQ,GAAI,WAAWI,GAAe,IAAMC,GAAcE,GAAaD,EAAW,EAC1E5Q,EAAK,kBAAkB,MAAM,KAAOyQ,GAAa,KACjDzQ,EAAK,kBAAkB,MAAM,MAAQ,MACzC,GACJ,CACA,SAASuQ,IAAwB,CAE7B,QADIO,EAAgB,KACX5R,EAAI,EAAGA,EAAI,SAAS,YAAY,OAAQA,IAAK,CAClD,IAAI6R,EAAQ,SAAS,YAAY7R,CAAC,EAClC,GAAK6R,EAAM,SAEX,IAAI,CACAA,EAAM,QACV,MACY,CACR,QACJ,CACAD,EAAgBC,EAChB,MACJ,CACA,OAAOD,GAAwCE,GAAiB,CACpE,CACA,SAASA,IAAmB,CACxB,IAAIC,EAAQ,SAAS,cAAc,OAAO,EAC1C,gBAAS,KAAK,YAAYA,CAAK,EACxBA,EAAM,KACjB,CACA,SAAS7P,IAAS,CACVpB,EAAK,OAAO,YAAcA,EAAK,WAEnCmG,GAAiB,EACjBwE,GAA6B,EAC7B3D,EAAU,EACd,CACA,SAAS2F,IAAgB,CACrB3M,EAAK,OAAO,MAAM,EACd,OAAO,UAAU,UAAU,QAAQ,MAAM,IAAM,IAC/C,UAAU,mBAAqB,OAC/B,WAAWA,EAAK,MAAO,CAAC,EAGxBA,EAAK,MAAM,CAEnB,CACA,SAAS2F,GAAW/C,EAAG,CACnBA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAClB,IAAIsO,EAAe,SAAUC,EAAK,CAC9B,OAAOA,EAAI,WACPA,EAAI,UAAU,SAAS,eAAe,GACtC,CAACA,EAAI,UAAU,SAAS,oBAAoB,GAC5C,CAACA,EAAI,UAAU,SAAS,YAAY,CAC5C,EACInS,EAAIoS,GAAWxM,GAAehC,CAAC,EAAGsO,CAAY,EAClD,GAAIlS,IAAM,OAEV,KAAIuH,EAASvH,EACTqS,EAAgBrR,EAAK,sBAAwB,IAAI,KAAKuG,EAAO,QAAQ,QAAQ,CAAC,EAC9E+K,GAAqBD,EAAa,SAAS,EAAIrR,EAAK,cACpDqR,EAAa,SAAS,EAClBrR,EAAK,aAAeA,EAAK,OAAO,WAAa,IACjDA,EAAK,OAAO,OAAS,QAEzB,GADAA,EAAK,iBAAmBuG,EACpBvG,EAAK,OAAO,OAAS,SACrBA,EAAK,cAAgB,CAACqR,CAAY,UAC7BrR,EAAK,OAAO,OAAS,WAAY,CACtC,IAAIuR,GAAgB9J,GAAe4J,CAAY,EAC3CE,GACAvR,EAAK,cAAc,OAAO,SAASuR,EAAa,EAAG,CAAC,EAEpDvR,EAAK,cAAc,KAAKqR,CAAY,CAC5C,MACSrR,EAAK,OAAO,OAAS,UACtBA,EAAK,cAAc,SAAW,GAC9BA,EAAK,MAAM,GAAO,EAAK,EAE3BA,EAAK,sBAAwBqR,EAC7BrR,EAAK,cAAc,KAAKqR,CAAY,EAChCvO,GAAauO,EAAcrR,EAAK,cAAc,CAAC,EAAG,EAAI,IAAM,GAC5DA,EAAK,cAAc,KAAK,SAAUP,EAAG+R,GAAG,CAAE,OAAO/R,EAAE,QAAQ,EAAI+R,GAAE,QAAQ,CAAG,CAAC,GAGrF,GADAtO,EAAmB,EACfoO,EAAmB,CACnB,IAAItF,EAAYhM,EAAK,cAAgBqR,EAAa,YAAY,EAC9DrR,EAAK,YAAcqR,EAAa,YAAY,EAC5CrR,EAAK,aAAeqR,EAAa,SAAS,EACtCrF,IACA5J,GAAa,cAAc,EAC3B+D,GAAiB,GAErB/D,GAAa,eAAe,CAChC,CAcA,GAbAuI,GAA6B,EAC7B3D,EAAU,EACV9F,GAAY,EACR,CAACoQ,GACDtR,EAAK,OAAO,OAAS,SACrBA,EAAK,OAAO,aAAe,EAC3B2H,EAAepB,CAAM,EAChBvG,EAAK,mBAAqB,QAC/BA,EAAK,cAAgB,QACrBA,EAAK,kBAAoBA,EAAK,iBAAiB,MAAM,EAErDA,EAAK,cAAgB,QACrBA,EAAK,cAAgB,QAAaA,EAAK,YAAY,MAAM,EACzDA,EAAK,OAAO,cAAe,CAC3B,IAAIyR,GAASzR,EAAK,OAAO,OAAS,UAAY,CAACA,EAAK,OAAO,WACvD0R,EAAQ1R,EAAK,OAAO,OAAS,SAC7BA,EAAK,cAAc,SAAW,GAC9B,CAACA,EAAK,OAAO,YACbyR,IAAUC,IACV/E,GAAc,CAEtB,CACAzH,EAAc,EAClB,CACA,IAAIyM,GAAY,CACZ,OAAQ,CAAC9P,GAAamJ,CAAc,EACpC,WAAY,CAACP,EAAavI,EAAkB6E,CAAa,EACzD,QAAS,CAAC9F,CAAU,EACpB,QAAS,CAACA,CAAU,EACpB,gBAAiB,CAAC2Q,EAAqB,EACvC,WAAY,CACR,UAAY,CACJ5R,EAAK,OAAO,aAAe,IAC3BK,EAAKL,EAAK,OAAQ,QAASA,EAAK,IAAI,EACpCK,EAAKL,EAAK,OAAQ,QAASA,EAAK,IAAI,IAGpCA,EAAK,OAAO,oBAAoB,QAASA,EAAK,IAAI,EAClDA,EAAK,OAAO,oBAAoB,QAASA,EAAK,IAAI,EAE1D,CACJ,CACJ,EACA,SAASqB,GAAIwQ,EAAQ1G,EAAO,CACxB,GAAI0G,IAAW,MAAQ,OAAOA,GAAW,SAAU,CAC/C,OAAO,OAAO7R,EAAK,OAAQ6R,CAAM,EACjC,QAAS7C,KAAO6C,EACRF,GAAU3C,CAAG,IAAM,QACnB2C,GAAU3C,CAAG,EAAE,QAAQ,SAAUlC,EAAG,CAAE,OAAOA,EAAE,CAAG,CAAC,CAE/D,MAEI9M,EAAK,OAAO6R,CAAM,EAAI1G,EAClBwG,GAAUE,CAAM,IAAM,OACtBF,GAAUE,CAAM,EAAE,QAAQ,SAAU/E,EAAG,CAAE,OAAOA,EAAE,CAAG,CAAC,EACjD8B,GAAM,QAAQiD,CAAM,EAAI,KAC7B7R,EAAK,OAAO6R,CAAM,EAAI/C,GAAS3D,CAAK,GAE5CnL,EAAK,OAAO,EACZkB,GAAY,EAAI,CACpB,CACA,SAAS4Q,GAAgBC,EAAWC,EAAQ,CACxC,IAAI3D,EAAQ,CAAC,EACb,GAAI0D,aAAqB,MACrB1D,EAAQ0D,EAAU,IAAI,SAAUlI,EAAG,CAAE,OAAO7J,EAAK,UAAU6J,EAAGmI,CAAM,CAAG,CAAC,UACnED,aAAqB,MAAQ,OAAOA,GAAc,SACvD1D,EAAQ,CAACrO,EAAK,UAAU+R,EAAWC,CAAM,CAAC,UACrC,OAAOD,GAAc,SAC1B,OAAQ/R,EAAK,OAAO,KAAM,CACtB,IAAK,SACL,IAAK,OACDqO,EAAQ,CAACrO,EAAK,UAAU+R,EAAWC,CAAM,CAAC,EAC1C,MACJ,IAAK,WACD3D,EAAQ0D,EACH,MAAM/R,EAAK,OAAO,WAAW,EAC7B,IAAI,SAAUuE,EAAM,CAAE,OAAOvE,EAAK,UAAUuE,EAAMyN,CAAM,CAAG,CAAC,EACjE,MACJ,IAAK,QACD3D,EAAQ0D,EACH,MAAM/R,EAAK,KAAK,cAAc,EAC9B,IAAI,SAAUuE,EAAM,CAAE,OAAOvE,EAAK,UAAUuE,EAAMyN,CAAM,CAAG,CAAC,EACjE,MACJ,QACI,KACR,MAGAhS,EAAK,OAAO,aAAa,IAAI,MAAM,0BAA4B,KAAK,UAAU+R,CAAS,CAAC,CAAC,EAC7F/R,EAAK,cAAiBA,EAAK,OAAO,oBAC5BqO,EACAA,EAAM,OAAO,SAAUxE,EAAG,CAAE,OAAOA,aAAa,MAAQ7I,GAAU6I,EAAG,EAAK,CAAG,CAAC,EAChF7J,EAAK,OAAO,OAAS,SACrBA,EAAK,cAAc,KAAK,SAAUP,EAAG+R,EAAG,CAAE,OAAO/R,EAAE,QAAQ,EAAI+R,EAAE,QAAQ,CAAG,CAAC,CACrF,CACA,SAASlQ,GAAQiD,EAAMW,EAAe8M,EAAQ,CAG1C,GAFI9M,IAAkB,SAAUA,EAAgB,IAC5C8M,IAAW,SAAUA,EAAShS,EAAK,OAAO,YACzCuE,IAAS,GAAK,CAACA,GAAUA,aAAgB,OAASA,EAAK,SAAW,EACnE,OAAOvE,EAAK,MAAMkF,CAAa,EACnC4M,GAAgBvN,EAAMyN,CAAM,EAC5BhS,EAAK,sBACDA,EAAK,cAAcA,EAAK,cAAc,OAAS,CAAC,EACpDA,EAAK,OAAO,EACZiB,EAAW,OAAWiE,CAAa,EACnC5E,EAAiB,EACbN,EAAK,cAAc,SAAW,GAC9BA,EAAK,MAAM,EAAK,EAEpBkB,GAAYgE,CAAa,EACrBA,GACA9C,GAAa,UAAU,CAC/B,CACA,SAASkM,GAAe2D,EAAK,CACzB,OAAOA,EACF,MAAM,EACN,IAAI,SAAUC,EAAM,CACrB,OAAI,OAAOA,GAAS,UAChB,OAAOA,GAAS,UAChBA,aAAgB,KACTlS,EAAK,UAAUkS,EAAM,OAAW,EAAI,EAEtCA,GACL,OAAOA,GAAS,UAChBA,EAAK,MACLA,EAAK,GACE,CACH,KAAMlS,EAAK,UAAUkS,EAAK,KAAM,MAAS,EACzC,GAAIlS,EAAK,UAAUkS,EAAK,GAAI,MAAS,CACzC,EACGA,CACX,CAAC,EACI,OAAO,SAAUpF,EAAG,CAAE,OAAOA,CAAG,CAAC,CAC1C,CACA,SAAS/K,IAAa,CAClB/B,EAAK,cAAgB,CAAC,EACtBA,EAAK,IAAMA,EAAK,UAAUA,EAAK,OAAO,GAAG,GAAK,IAAI,KAClD,IAAImS,EAAgBnS,EAAK,OAAO,eAC1BA,EAAK,MAAM,WAAa,SACtBA,EAAK,MAAM,WAAa,aACxBA,EAAK,MAAM,aACXA,EAAK,MAAM,QAAUA,EAAK,MAAM,YAC9B,KACAA,EAAK,MAAM,OACjBmS,GACAL,GAAgBK,EAAenS,EAAK,OAAO,UAAU,EACzDA,EAAK,aACDA,EAAK,cAAc,OAAS,EACtBA,EAAK,cAAc,CAAC,EACpBA,EAAK,OAAO,SACVA,EAAK,OAAO,QAAQ,QAAQ,EAAIA,EAAK,IAAI,QAAQ,EAC/CA,EAAK,OAAO,QACZA,EAAK,OAAO,SACVA,EAAK,OAAO,QAAQ,QAAQ,EAAIA,EAAK,IAAI,QAAQ,EAC/CA,EAAK,OAAO,QACZA,EAAK,IACvBA,EAAK,YAAcA,EAAK,aAAa,YAAY,EACjDA,EAAK,aAAeA,EAAK,aAAa,SAAS,EAC3CA,EAAK,cAAc,OAAS,IAC5BA,EAAK,sBAAwBA,EAAK,cAAc,CAAC,GACjDA,EAAK,OAAO,UAAY,SACxBA,EAAK,OAAO,QAAUA,EAAK,UAAUA,EAAK,OAAO,QAAS,KAAK,GAC/DA,EAAK,OAAO,UAAY,SACxBA,EAAK,OAAO,QAAUA,EAAK,UAAUA,EAAK,OAAO,QAAS,KAAK,GACnEA,EAAK,eACD,CAAC,CAACA,EAAK,OAAO,UACTA,EAAK,OAAO,QAAQ,SAAS,EAAI,GAC9BA,EAAK,OAAO,QAAQ,WAAW,EAAI,GACnCA,EAAK,OAAO,QAAQ,WAAW,EAAI,GAC/CA,EAAK,eACD,CAAC,CAACA,EAAK,OAAO,UACTA,EAAK,OAAO,QAAQ,SAAS,EAAI,GAC9BA,EAAK,OAAO,QAAQ,WAAW,EAAI,GACnCA,EAAK,OAAO,QAAQ,WAAW,EAAI,EACnD,CACA,SAAS8B,IAAc,CAEnB,GADA9B,EAAK,MAAQiP,GAAa,EACtB,CAACjP,EAAK,MAAO,CACbA,EAAK,OAAO,aAAa,IAAI,MAAM,iCAAiC,CAAC,EACrE,MACJ,CACAA,EAAK,MAAM,MAAQA,EAAK,MAAM,KAC9BA,EAAK,MAAM,KAAO,OAClBA,EAAK,MAAM,UAAU,IAAI,iBAAiB,EAC1CA,EAAK,OAASA,EAAK,MACfA,EAAK,OAAO,WACZA,EAAK,SAAWa,GAAcb,EAAK,MAAM,SAAUA,EAAK,OAAO,aAAa,EAC5EA,EAAK,OAASA,EAAK,SACnBA,EAAK,SAAS,YAAcA,EAAK,MAAM,YACvCA,EAAK,SAAS,SAAWA,EAAK,MAAM,SACpCA,EAAK,SAAS,SAAWA,EAAK,MAAM,SACpCA,EAAK,SAAS,SAAWA,EAAK,MAAM,SACpCA,EAAK,SAAS,KAAO,OACrBA,EAAK,MAAM,aAAa,OAAQ,QAAQ,EACpC,CAACA,EAAK,OAAO,QAAUA,EAAK,MAAM,YAClCA,EAAK,MAAM,WAAW,aAAaA,EAAK,SAAUA,EAAK,MAAM,WAAW,GAE3EA,EAAK,OAAO,YACbA,EAAK,OAAO,aAAa,WAAY,UAAU,EACnD4R,GAAsB,CAC1B,CACA,SAASA,IAAwB,CAC7B5R,EAAK,iBAAmBA,EAAK,OAAO,iBAAmBA,EAAK,MAChE,CACA,SAASoF,IAAc,CACnB,IAAIgN,EAAYpS,EAAK,OAAO,WACtBA,EAAK,OAAO,WACR,OACA,iBACJ,OACNA,EAAK,YAAca,GAAc,QAASb,EAAK,MAAM,UAAY,mBAAmB,EACpFA,EAAK,YAAY,SAAW,EAC5BA,EAAK,YAAY,KAAOoS,EACxBpS,EAAK,YAAY,SAAWA,EAAK,MAAM,SACvCA,EAAK,YAAY,SAAWA,EAAK,MAAM,SACvCA,EAAK,YAAY,YAAcA,EAAK,MAAM,YAC1CA,EAAK,gBACDoS,IAAc,iBACR,gBACAA,IAAc,OACV,QACA,QACVpS,EAAK,cAAc,OAAS,IAC5BA,EAAK,YAAY,aAAeA,EAAK,YAAY,MAAQA,EAAK,WAAWA,EAAK,cAAc,CAAC,EAAGA,EAAK,eAAe,GAEpHA,EAAK,OAAO,UACZA,EAAK,YAAY,IAAMA,EAAK,WAAWA,EAAK,OAAO,QAAS,OAAO,GACnEA,EAAK,OAAO,UACZA,EAAK,YAAY,IAAMA,EAAK,WAAWA,EAAK,OAAO,QAAS,OAAO,GACnEA,EAAK,MAAM,aAAa,MAAM,IAC9BA,EAAK,YAAY,KAAO,OAAOA,EAAK,MAAM,aAAa,MAAM,CAAC,GAClEA,EAAK,MAAM,KAAO,SACdA,EAAK,WAAa,SAClBA,EAAK,SAAS,KAAO,UACzB,GAAI,CACIA,EAAK,MAAM,YACXA,EAAK,MAAM,WAAW,aAAaA,EAAK,YAAaA,EAAK,MAAM,WAAW,CACnF,MACW,CAAE,CACbK,EAAKL,EAAK,YAAa,SAAU,SAAU4C,EAAG,CAC1C5C,EAAK,QAAQ4E,GAAehC,CAAC,EAAE,MAAO,GAAO5C,EAAK,eAAe,EACjEoC,GAAa,UAAU,EACvBA,GAAa,SAAS,CAC1B,CAAC,CACL,CACA,SAASb,GAAOqB,EAAG,CACf,GAAI5C,EAAK,SAAW,GAChB,OAAOA,EAAK,MAAM,EACtBA,EAAK,KAAK4C,CAAC,CACf,CACA,SAASR,GAAasC,EAAO2N,EAAM,CAC/B,GAAIrS,EAAK,SAAW,OAEpB,KAAIsS,EAAQtS,EAAK,OAAO0E,CAAK,EAC7B,GAAI4N,IAAU,QAAaA,EAAM,OAAS,EACtC,QAASpT,EAAI,EAAGoT,EAAMpT,CAAC,GAAKA,EAAIoT,EAAM,OAAQpT,IAC1CoT,EAAMpT,CAAC,EAAEc,EAAK,cAAeA,EAAK,MAAM,MAAOA,EAAMqS,CAAI,EAE7D3N,IAAU,aACV1E,EAAK,MAAM,cAAcyG,GAAY,QAAQ,CAAC,EAC9CzG,EAAK,MAAM,cAAcyG,GAAY,OAAO,CAAC,GAErD,CACA,SAASA,GAAY8L,EAAM,CACvB,IAAI3P,EAAI,SAAS,YAAY,OAAO,EACpC,OAAAA,EAAE,UAAU2P,EAAM,GAAM,EAAI,EACrB3P,CACX,CACA,SAAS6E,GAAelD,EAAM,CAC1B,QAASrF,EAAI,EAAGA,EAAIc,EAAK,cAAc,OAAQd,IAAK,CAChD,IAAImS,EAAerR,EAAK,cAAcd,CAAC,EACvC,GAAImS,aAAwB,MACxBvO,GAAauO,EAAc9M,CAAI,IAAM,EACrC,MAAO,GAAKrF,CACpB,CACA,MAAO,EACX,CACA,SAASwI,GAAcnD,EAAM,CACzB,OAAIvE,EAAK,OAAO,OAAS,SAAWA,EAAK,cAAc,OAAS,EACrD,GACH8C,GAAayB,EAAMvE,EAAK,cAAc,CAAC,CAAC,GAAK,GACjD8C,GAAayB,EAAMvE,EAAK,cAAc,CAAC,CAAC,GAAK,CACrD,CACA,SAAS2K,IAA+B,CAChC3K,EAAK,OAAO,YAAcA,EAAK,UAAY,CAACA,EAAK,WAErDA,EAAK,aAAa,QAAQ,SAAUuK,EAAarL,EAAG,CAChD,IAAI2K,EAAI,IAAI,KAAK7J,EAAK,YAAaA,EAAK,aAAc,CAAC,EACvD6J,EAAE,SAAS7J,EAAK,aAAed,CAAC,EAC5Bc,EAAK,OAAO,WAAa,GACzBA,EAAK,OAAO,oBAAsB,SAClCA,EAAK,cAAcd,CAAC,EAAE,YAClB6K,GAAWF,EAAE,SAAS,EAAG7J,EAAK,OAAO,sBAAuBA,EAAK,IAAI,EAAI,IAG7EA,EAAK,wBAAwB,MAAQ6J,EAAE,SAAS,EAAE,SAAS,EAE/DU,EAAY,MAAQV,EAAE,YAAY,EAAE,SAAS,CACjD,CAAC,EACD7J,EAAK,oBACDA,EAAK,OAAO,UAAY,SACnBA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAY,EAChDA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,SAAS,EAClDA,EAAK,YAAcA,EAAK,OAAO,QAAQ,YAAY,GACjEA,EAAK,oBACDA,EAAK,OAAO,UAAY,SACnBA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAY,EAChDA,EAAK,aAAe,EAAIA,EAAK,OAAO,QAAQ,SAAS,EACrDA,EAAK,YAAcA,EAAK,OAAO,QAAQ,YAAY,GACrE,CACA,SAASsM,GAAWkG,EAAgB,CAChC,IAAIR,EAASQ,IACRxS,EAAK,OAAO,SAAWA,EAAK,OAAO,UAAYA,EAAK,OAAO,YAChE,OAAOA,EAAK,cACP,IAAI,SAAUyS,EAAM,CAAE,OAAOzS,EAAK,WAAWyS,EAAMT,CAAM,CAAG,CAAC,EAC7D,OAAO,SAAUnI,EAAG3K,EAAG+S,EAAK,CAC7B,OAAOjS,EAAK,OAAO,OAAS,SACxBA,EAAK,OAAO,YACZiS,EAAI,QAAQpI,CAAC,IAAM3K,CAC3B,CAAC,EACI,KAAKc,EAAK,OAAO,OAAS,QACzBA,EAAK,OAAO,YACZA,EAAK,KAAK,cAAc,CAClC,CACA,SAASkB,GAAYgE,EAAe,CAC5BA,IAAkB,SAAUA,EAAgB,IAC5ClF,EAAK,cAAgB,QAAaA,EAAK,kBACvCA,EAAK,YAAY,MACbA,EAAK,wBAA0B,OACzBA,EAAK,WAAWA,EAAK,sBAAuBA,EAAK,eAAe,EAChE,IAEdA,EAAK,MAAM,MAAQsM,GAAWtM,EAAK,OAAO,UAAU,EAChDA,EAAK,WAAa,SAClBA,EAAK,SAAS,MAAQsM,GAAWtM,EAAK,OAAO,SAAS,GAEtDkF,IAAkB,IAClB9C,GAAa,eAAe,CACpC,CACA,SAASsD,GAAgB9C,EAAG,CACxB,IAAI+B,EAAcC,GAAehC,CAAC,EAC9B8P,EAAc1S,EAAK,aAAa,SAAS2E,CAAW,EACpDgO,EAAc3S,EAAK,aAAa,SAAS2E,CAAW,EACpD+N,GAAeC,EACfnS,GAAYkS,EAAc,GAAK,CAAC,EAE3B1S,EAAK,aAAa,QAAQ2E,CAAW,GAAK,EAC/CA,EAAY,OAAO,EAEdA,EAAY,UAAU,SAAS,SAAS,EAC7C3E,EAAK,WAAWA,EAAK,YAAc,CAAC,EAE/B2E,EAAY,UAAU,SAAS,WAAW,GAC/C3E,EAAK,WAAWA,EAAK,YAAc,CAAC,CAE5C,CACA,SAASgD,GAAYJ,EAAG,CACpBA,EAAE,eAAe,EACjB,IAAIgQ,EAAYhQ,EAAE,OAAS,UAAW+B,EAAcC,GAAehC,CAAC,EAAG4D,EAAQ7B,EAC3E3E,EAAK,OAAS,QAAa2E,IAAgB3E,EAAK,OAChDA,EAAK,KAAK,YACNA,EAAK,KAAK,KAAKsD,GAAItD,EAAK,KAAK,cAAgBA,EAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAEvE,IAAI6S,EAAM,WAAWrM,EAAM,aAAa,KAAK,CAAC,EAAGsM,EAAM,WAAWtM,EAAM,aAAa,KAAK,CAAC,EAAGuM,GAAO,WAAWvM,EAAM,aAAa,MAAM,CAAC,EAAGwM,EAAW,SAASxM,EAAM,MAAO,EAAE,EAAGH,GAAQzD,EAAE,QACxLgQ,EAAahQ,EAAE,QAAU,GAAK,EAAI,GAAM,GACzCqQ,EAAWD,EAAWD,GAAO1M,GACjC,GAAI,OAAOG,EAAM,MAAU,KAAeA,EAAM,MAAM,SAAW,EAAG,CAChE,IAAI0M,EAAa1M,IAAUxG,EAAK,YAAamT,GAAe3M,IAAUxG,EAAK,cACvEiT,EAAWJ,GACXI,EACIH,EACIG,EACA3P,GAAI,CAAC4P,CAAU,GACd5P,GAAI4P,CAAU,GAAK5P,GAAI,CAACtD,EAAK,IAAI,GACtCmT,IACA/M,EAAkB,OAAW,GAAIpG,EAAK,WAAW,GAEhDiT,EAAWH,IAChBG,EACIzM,IAAUxG,EAAK,YAAciT,EAAWH,EAAMxP,GAAI,CAACtD,EAAK,IAAI,EAAI6S,EAChEM,IACA/M,EAAkB,OAAW,EAAGpG,EAAK,WAAW,GAEpDA,EAAK,MACLkT,IACCH,KAAS,EACJE,EAAWD,IAAa,GACxB,KAAK,IAAIC,EAAWD,CAAQ,EAAID,MACtC/S,EAAK,KAAK,YACNA,EAAK,KAAK,KAAKsD,GAAItD,EAAK,KAAK,cAAgBA,EAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAEvEwG,EAAM,MAAQhC,GAAIyO,CAAQ,CAC9B,CACJ,CACA,OAAAtR,EAAK,EACE3B,CACX,CACA,SAASoT,GAAWC,EAAU5Q,EAAQ,CAKlC,QAJI6Q,EAAQ,MAAM,UAAU,MACvB,KAAKD,CAAQ,EACb,OAAO,SAAUvG,EAAG,CAAE,OAAOA,aAAa,WAAa,CAAC,EACzDyG,EAAY,CAAC,EACRrU,EAAI,EAAGA,EAAIoU,EAAM,OAAQpU,IAAK,CACnC,IAAIsU,EAAOF,EAAMpU,CAAC,EAClB,GAAI,CACA,GAAIsU,EAAK,aAAa,cAAc,IAAM,KACtC,SACAA,EAAK,aAAe,SACpBA,EAAK,WAAW,QAAQ,EACxBA,EAAK,WAAa,QAEtBA,EAAK,WAAa3T,GAAkB2T,EAAM/Q,GAAU,CAAC,CAAC,EACtD8Q,EAAU,KAAKC,EAAK,UAAU,CAClC,OACO5Q,EAAG,CACN,QAAQ,MAAMA,CAAC,CACnB,CACJ,CACA,OAAO2Q,EAAU,SAAW,EAAIA,EAAU,CAAC,EAAIA,CACnD,CACI,OAAO,YAAgB,KACvB,OAAO,eAAmB,KAC1B,OAAO,SAAa,MACpB,eAAe,UAAU,UAAY,SAAS,UAAU,UAAY,SAAU9Q,EAAQ,CAClF,OAAO2Q,GAAW,KAAM3Q,CAAM,CAClC,EACA,YAAY,UAAU,UAAY,SAAUA,EAAQ,CAChD,OAAO2Q,GAAW,CAAC,IAAI,EAAG3Q,CAAM,CACpC,GAEJ,IAAIvC,GAAY,SAAUuT,EAAUhR,EAAQ,CACxC,OAAI,OAAOgR,GAAa,SACbL,GAAW,OAAO,SAAS,iBAAiBK,CAAQ,EAAGhR,CAAM,EAE/DgR,aAAoB,KAClBL,GAAW,CAACK,CAAQ,EAAGhR,CAAM,EAG7B2Q,GAAWK,EAAUhR,CAAM,CAE1C,EACAvC,GAAU,cAAgB,CAAC,EAC3BA,GAAU,MAAQ,CACd,GAAInB,GAAS,CAAC,EAAGoB,EAAO,EACxB,QAASpB,GAAS,CAAC,EAAGoB,EAAO,CACjC,EACAD,GAAU,SAAW,SAAUwT,EAAM,CACjCxT,GAAU,MAAM,QAAUnB,GAASA,GAAS,CAAC,EAAGmB,GAAU,MAAM,OAAO,EAAGwT,CAAI,CAClF,EACAxT,GAAU,YAAc,SAAUuC,EAAQ,CACtCvC,GAAU,cAAgBnB,GAASA,GAAS,CAAC,EAAGmB,GAAU,aAAa,EAAGuC,CAAM,CACpF,EACAvC,GAAU,UAAYE,GAAiB,CAAC,CAAC,EACzCF,GAAU,WAAaiP,GAAoB,CAAC,CAAC,EAC7CjP,GAAU,aAAe4C,GACrB,OAAO,OAAW,KAAe,OAAO,OAAO,GAAO,MACtD,OAAO,GAAG,UAAY,SAAUL,EAAQ,CACpC,OAAO2Q,GAAW,KAAM3Q,CAAM,CAClC,GAEJ,KAAK,UAAU,QAAU,SAAU0G,EAAM,CACrC,OAAO,IAAI,KAAK,KAAK,YAAY,EAAG,KAAK,SAAS,EAAG,KAAK,QAAQ,GAAK,OAAOA,GAAS,SAAW,SAASA,EAAM,EAAE,EAAIA,EAAK,CAChI,EACI,OAAO,OAAW,MAClB,OAAO,UAAYjJ,IAEvB,IAAOyT,GAAQzT,GC3/DA,SAAR0T,IAAkC,CACvC,MAAO,CACL,MAAO,CACL,GAAM,CAAE,WAAAC,CAAW,EAAI,KAAK,IAAI,QAC1BC,EAAU,CACd,WAAYD,IAAe,MAC3B,UAAW,EACb,EACAE,GAAU,KAAK,IAAKD,CAAO,CAC7B,CACF,CACF,CCCA,IAAIE,GAAY,KAIdC,GAAa,IAGbC,GAAW,mBAGXC,GAAO,qgCAGPC,GAAK,qgCAILC,GAAW,CAOT,UAAW,GAiBX,SAAU,EAeV,OAAQ,EAIR,SAAU,GAIV,SAAW,GAIX,KAAM,CAACL,GAIP,KAAMA,GAGN,OAAQ,EACV,EAMAM,GAASC,GACTC,EAAW,GAEXC,GAAe,kBACfC,GAAkBD,GAAe,qBACjCE,GAAyBF,GAAe,2BACxCG,GAAoBH,GAAe,qBACnCI,GAAM,mBAENC,GAAY,KAAK,MACjBC,GAAU,KAAK,IAEfC,GAAW,6CACXC,GAAQ,yDACRC,GAAU,gDACVC,GAAY,qCAEZC,GAAO,IACPC,EAAW,EACXC,GAAmB,iBAEnBC,GAAiBpB,GAAK,OAAS,EAC/BqB,GAAepB,GAAG,OAAS,EAG3BqB,EAAI,CAAE,YAAaZ,EAAI,EA0EzBY,EAAE,cAAgBA,EAAE,IAAM,UAAY,CACpC,IAAIC,EAAI,IAAI,KAAK,YAAY,IAAI,EACjC,OAAIA,EAAE,EAAI,IAAGA,EAAE,EAAI,GACZC,EAASD,CAAC,CACnB,EAQAD,EAAE,KAAO,UAAY,CACnB,OAAOE,EAAS,IAAI,KAAK,YAAY,IAAI,EAAG,KAAK,EAAI,EAAG,CAAC,CAC3D,EAWAF,EAAE,UAAYA,EAAE,MAAQ,SAAUG,EAAKC,EAAK,CAC1C,IAAIC,EACFJ,EAAI,KACJK,EAAOL,EAAE,YAGX,GAFAE,EAAM,IAAIG,EAAKH,CAAG,EAClBC,EAAM,IAAIE,EAAKF,CAAG,EACd,CAACD,EAAI,GAAK,CAACC,EAAI,EAAG,OAAO,IAAIE,EAAK,GAAG,EACzC,GAAIH,EAAI,GAAGC,CAAG,EAAG,MAAM,MAAMnB,GAAkBmB,CAAG,EAClD,OAAAC,EAAIJ,EAAE,IAAIE,CAAG,EACNE,EAAI,EAAIF,EAAMF,EAAE,IAAIG,CAAG,EAAI,EAAIA,EAAM,IAAIE,EAAKL,CAAC,CACxD,EAWAD,EAAE,WAAaA,EAAE,IAAM,SAAUO,EAAG,CAClC,IAAIC,EAAGC,EAAGC,EAAKC,EACbV,EAAI,KACJW,EAAKX,EAAE,EACPY,GAAMN,EAAI,IAAIN,EAAE,YAAYM,CAAC,GAAG,EAChCO,EAAKb,EAAE,EACPc,EAAKR,EAAE,EAGT,GAAI,CAACK,GAAM,CAACC,EACV,MAAO,CAACC,GAAM,CAACC,EAAK,IAAMD,IAAOC,EAAKD,EAAKF,IAAOC,EAAK,EAAI,CAACD,EAAKE,EAAK,EAAI,EAAI,GAIhF,GAAI,CAACF,EAAG,CAAC,GAAK,CAACC,EAAG,CAAC,EAAG,OAAOD,EAAG,CAAC,EAAIE,EAAKD,EAAG,CAAC,EAAI,CAACE,EAAK,EAGxD,GAAID,IAAOC,EAAI,OAAOD,EAGtB,GAAIb,EAAE,IAAMM,EAAE,EAAG,OAAON,EAAE,EAAIM,EAAE,EAAIO,EAAK,EAAI,EAAI,GAMjD,IAJAJ,EAAME,EAAG,OACTD,EAAME,EAAG,OAGJL,EAAI,EAAGC,EAAIC,EAAMC,EAAMD,EAAMC,EAAKH,EAAIC,EAAG,EAAED,EAC9C,GAAII,EAAGJ,CAAC,IAAMK,EAAGL,CAAC,EAAG,OAAOI,EAAGJ,CAAC,EAAIK,EAAGL,CAAC,EAAIM,EAAK,EAAI,EAAI,GAI3D,OAAOJ,IAAQC,EAAM,EAAID,EAAMC,EAAMG,EAAK,EAAI,EAAI,EACpD,EAgBAd,EAAE,OAASA,EAAE,IAAM,UAAY,CAC7B,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAKA,EAAE,EAGFA,EAAE,EAAE,CAAC,GAEVe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,KAAK,IAAIf,EAAE,EAAGA,EAAE,GAAG,CAAC,EAAIL,EAC9CU,EAAK,SAAW,EAEhBL,EAAIiB,GAAOZ,EAAMa,GAAiBb,EAAML,CAAC,CAAC,EAE1CK,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAETf,EAASpB,IAAY,GAAKA,IAAY,EAAImB,EAAE,IAAI,EAAIA,EAAGe,EAAIC,EAAI,EAAI,GAZtD,IAAIX,EAAK,CAAC,EAHb,IAAIA,EAAK,GAAG,CAgB/B,EAmBAN,EAAE,SAAWA,EAAE,KAAO,UAAY,CAChC,IAAIoB,EAAGC,EAAGC,EAAGC,EAAGC,EAAKC,EAAGC,EAAIC,EAAGC,EAAIC,EACjC5B,EAAI,KACJK,EAAOL,EAAE,YAEX,GAAI,CAACA,EAAE,SAAS,GAAKA,EAAE,OAAO,EAAG,OAAO,IAAIK,EAAKL,CAAC,EAoClD,IAnCAlB,EAAW,GAGX0C,EAAIxB,EAAE,EAAIX,GAAQW,EAAE,EAAIA,EAAG,EAAI,CAAC,EAI5B,CAACwB,GAAK,KAAK,IAAIA,CAAC,GAAK,EAAI,GAC3BH,EAAIQ,GAAe7B,EAAE,CAAC,EACtBmB,EAAInB,EAAE,GAGFwB,GAAKL,EAAIE,EAAE,OAAS,GAAK,KAAGA,GAAMG,GAAK,GAAKA,GAAK,GAAK,IAAM,MAChEA,EAAInC,GAAQgC,EAAG,EAAI,CAAC,EAGpBF,EAAI/B,IAAW+B,EAAI,GAAK,CAAC,GAAKA,EAAI,IAAMA,EAAI,EAAI,GAAK,IAEjDK,GAAK,EAAI,EACXH,EAAI,KAAOF,GAEXE,EAAIG,EAAE,cAAc,EACpBH,EAAIA,EAAE,MAAM,EAAGA,EAAE,QAAQ,GAAG,EAAI,CAAC,EAAIF,GAGvCG,EAAI,IAAIjB,EAAKgB,CAAC,EACdC,EAAE,EAAItB,EAAE,GAERsB,EAAI,IAAIjB,EAAKmB,EAAE,SAAS,CAAC,EAG3BC,GAAMN,EAAId,EAAK,WAAa,IAW1B,GANAqB,EAAIJ,EACJK,EAAKD,EAAE,MAAMA,CAAC,EAAE,MAAMA,CAAC,EACvBE,EAAUD,EAAG,KAAK3B,CAAC,EACnBsB,EAAIQ,GAAOF,EAAQ,KAAK5B,CAAC,EAAE,MAAM0B,CAAC,EAAGE,EAAQ,KAAKD,CAAE,EAAGF,EAAK,EAAG,CAAC,EAG5DI,GAAeH,EAAE,CAAC,EAAE,MAAM,EAAGD,CAAE,KAAOJ,EAAIQ,GAAeP,EAAE,CAAC,GAAG,MAAM,EAAGG,CAAE,EAK5E,GAJAJ,EAAIA,EAAE,MAAMI,EAAK,EAAGA,EAAK,CAAC,EAItBJ,GAAK,QAAU,CAACE,GAAOF,GAAK,OAAQ,CAItC,GAAI,CAACE,IACHtB,EAASyB,EAAGP,EAAI,EAAG,CAAC,EAEhBO,EAAE,MAAMA,CAAC,EAAE,MAAMA,CAAC,EAAE,GAAG1B,CAAC,GAAG,CAC7BsB,EAAII,EACJ,KACF,CAGFD,GAAM,EACNF,EAAM,CACR,KAAO,EAID,CAAC,CAACF,GAAK,CAAC,CAACA,EAAE,MAAM,CAAC,GAAKA,EAAE,OAAO,CAAC,GAAK,OAGxCpB,EAASqB,EAAGH,EAAI,EAAG,CAAC,EACpBC,EAAI,CAACE,EAAE,MAAMA,CAAC,EAAE,MAAMA,CAAC,EAAE,GAAGtB,CAAC,GAG/B,KACF,CAIJ,OAAAlB,EAAW,GAEJmB,EAASqB,EAAGH,EAAGd,EAAK,SAAUe,CAAC,CACxC,EAOArB,EAAE,cAAgBA,EAAE,GAAK,UAAY,CACnC,IAAIgC,EACFC,EAAI,KAAK,EACTX,EAAI,IAEN,GAAIW,EAAG,CAML,GALAD,EAAIC,EAAE,OAAS,EACfX,GAAKU,EAAI3C,GAAU,KAAK,EAAIO,CAAQ,GAAKA,EAGzCoC,EAAIC,EAAED,CAAC,EACHA,EAAG,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAIV,IAChCA,EAAI,IAAGA,EAAI,EACjB,CAEA,OAAOA,CACT,EAwBAtB,EAAE,UAAYA,EAAE,IAAM,SAAUO,EAAG,CACjC,OAAOwB,GAAO,KAAM,IAAI,KAAK,YAAYxB,CAAC,CAAC,CAC7C,EAQAP,EAAE,mBAAqBA,EAAE,SAAW,SAAUO,EAAG,CAC/C,IAAIN,EAAI,KACNK,EAAOL,EAAE,YACX,OAAOC,EAAS6B,GAAO9B,EAAG,IAAIK,EAAKC,CAAC,EAAG,EAAG,EAAG,CAAC,EAAGD,EAAK,UAAWA,EAAK,QAAQ,CAChF,EAOAN,EAAE,OAASA,EAAE,GAAK,SAAUO,EAAG,CAC7B,OAAO,KAAK,IAAIA,CAAC,IAAM,CACzB,EAQAP,EAAE,MAAQ,UAAY,CACpB,OAAOE,EAAS,IAAI,KAAK,YAAY,IAAI,EAAG,KAAK,EAAI,EAAG,CAAC,CAC3D,EAQAF,EAAE,YAAcA,EAAE,GAAK,SAAUO,EAAG,CAClC,OAAO,KAAK,IAAIA,CAAC,EAAI,CACvB,EAQAP,EAAE,qBAAuBA,EAAE,IAAM,SAAUO,EAAG,CAC5C,IAAIF,EAAI,KAAK,IAAIE,CAAC,EAClB,OAAOF,GAAK,GAAKA,IAAM,CACzB,EA4BAL,EAAE,iBAAmBA,EAAE,KAAO,UAAY,CACxC,IAAIK,EAAGiB,EAAGN,EAAIC,EAAIiB,EAChBjC,EAAI,KACJK,EAAOL,EAAE,YACTkC,EAAM,IAAI7B,EAAK,CAAC,EAElB,GAAI,CAACL,EAAE,SAAS,EAAG,OAAO,IAAIK,EAAKL,EAAE,EAAI,EAAI,EAAI,GAAG,EACpD,GAAIA,EAAE,OAAO,EAAG,OAAOkC,EAEvBnB,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,KAAK,IAAIf,EAAE,EAAGA,EAAE,GAAG,CAAC,EAAI,EAC9CK,EAAK,SAAW,EAChB4B,EAAMjC,EAAE,EAAE,OAONiC,EAAM,IACR7B,EAAI,KAAK,KAAK6B,EAAM,CAAC,EACrBZ,GAAK,EAAIc,GAAQ,EAAG/B,CAAC,GAAG,SAAS,IAEjCA,EAAI,GACJiB,EAAI,gCAGNrB,EAAIoC,GAAa/B,EAAM,EAAGL,EAAE,MAAMqB,CAAC,EAAG,IAAIhB,EAAK,CAAC,EAAG,EAAI,EAMvD,QAHIgC,EACF9B,EAAIH,EACJkC,EAAK,IAAIjC,EAAK,CAAC,EACVE,KACL8B,EAAUrC,EAAE,MAAMA,CAAC,EACnBA,EAAIkC,EAAI,MAAMG,EAAQ,MAAMC,EAAG,MAAMD,EAAQ,MAAMC,CAAE,CAAC,CAAC,CAAC,EAG1D,OAAOrC,EAASD,EAAGK,EAAK,UAAYU,EAAIV,EAAK,SAAWW,EAAI,EAAI,CAClE,EAiCAjB,EAAE,eAAiBA,EAAE,KAAO,UAAY,CACtC,IAAIK,EAAGW,EAAIC,EAAIiB,EACbjC,EAAI,KACJK,EAAOL,EAAE,YAEX,GAAI,CAACA,EAAE,SAAS,GAAKA,EAAE,OAAO,EAAG,OAAO,IAAIK,EAAKL,CAAC,EAQlD,GANAe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,KAAK,IAAIf,EAAE,EAAGA,EAAE,GAAG,CAAC,EAAI,EAC9CK,EAAK,SAAW,EAChB4B,EAAMjC,EAAE,EAAE,OAENiC,EAAM,EACRjC,EAAIoC,GAAa/B,EAAM,EAAGL,EAAGA,EAAG,EAAI,MAC/B,CAWLI,EAAI,IAAM,KAAK,KAAK6B,CAAG,EACvB7B,EAAIA,EAAI,GAAK,GAAKA,EAAI,EAEtBJ,EAAIA,EAAE,MAAM,EAAImC,GAAQ,EAAG/B,CAAC,CAAC,EAC7BJ,EAAIoC,GAAa/B,EAAM,EAAGL,EAAGA,EAAG,EAAI,EAOpC,QAJIuC,EACFC,EAAK,IAAInC,EAAK,CAAC,EACfoC,EAAM,IAAIpC,EAAK,EAAE,EACjBqC,EAAM,IAAIrC,EAAK,EAAE,EACZD,KACLmC,EAAUvC,EAAE,MAAMA,CAAC,EACnBA,EAAIA,EAAE,MAAMwC,EAAG,KAAKD,EAAQ,MAAME,EAAI,MAAMF,CAAO,EAAE,KAAKG,CAAG,CAAC,CAAC,CAAC,CAEpE,CAEA,OAAArC,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAETf,EAASD,EAAGe,EAAIC,EAAI,EAAI,CACjC,EAmBAjB,EAAE,kBAAoBA,EAAE,KAAO,UAAY,CACzC,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAKA,EAAE,SAAS,EACZA,EAAE,OAAO,EAAU,IAAIK,EAAKL,CAAC,GAEjCe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,EACtBV,EAAK,SAAW,EAETyB,GAAO9B,EAAE,KAAK,EAAGA,EAAE,KAAK,EAAGK,EAAK,UAAYU,EAAIV,EAAK,SAAWW,CAAE,GAR/C,IAAIX,EAAKL,EAAE,CAAC,CASxC,EAsBAD,EAAE,cAAgBA,EAAE,KAAO,UAAY,CACrC,IAAIC,EAAI,KACNK,EAAOL,EAAE,YACTI,EAAIJ,EAAE,IAAI,EAAE,IAAI,CAAC,EACjBe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAEZ,OAAID,IAAM,GACDA,IAAM,EAETJ,EAAE,MAAM,EAAI2C,GAAMtC,EAAMU,EAAIC,CAAE,EAAI,IAAIX,EAAK,CAAC,EAE5C,IAAIA,EAAK,GAAG,EAGdL,EAAE,OAAO,EAAU2C,GAAMtC,EAAMU,EAAK,EAAGC,CAAE,EAAE,MAAM,EAAG,GAIxDX,EAAK,UAAYU,EAAK,EACtBV,EAAK,SAAW,EAGhBL,EAAI,IAAIK,EAAK,CAAC,EAAE,MAAML,CAAC,EAAE,IAAIA,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAEpDK,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAEThB,EAAE,MAAM,CAAC,EAClB,EAsBAD,EAAE,wBAA0BA,EAAE,MAAQ,UAAY,CAChD,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAIA,EAAE,IAAI,CAAC,EAAU,IAAIK,EAAKL,EAAE,GAAG,CAAC,EAAI,EAAI,GAAG,EAC1CA,EAAE,SAAS,GAEhBe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,KAAK,IAAI,KAAK,IAAIf,EAAE,CAAC,EAAGA,EAAE,GAAG,CAAC,EAAI,EACxDK,EAAK,SAAW,EAChBvB,EAAW,GAEXkB,EAAIA,EAAE,MAAMA,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAKA,CAAC,EAErClB,EAAW,GACXuB,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAEThB,EAAE,GAAG,GAdc,IAAIK,EAAKL,CAAC,CAetC,EAmBAD,EAAE,sBAAwBA,EAAE,MAAQ,UAAY,CAC9C,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,MAAI,CAACA,EAAE,SAAS,GAAKA,EAAE,OAAO,EAAU,IAAIK,EAAKL,CAAC,GAElDe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,EAAI,KAAK,IAAI,KAAK,IAAIf,EAAE,CAAC,EAAGA,EAAE,GAAG,CAAC,EAAI,EAC5DK,EAAK,SAAW,EAChBvB,EAAW,GAEXkB,EAAIA,EAAE,MAAMA,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAKA,CAAC,EAEpClB,EAAW,GACXuB,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAEThB,EAAE,GAAG,EACd,EAsBAD,EAAE,yBAA2BA,EAAE,MAAQ,UAAY,CACjD,IAAIgB,EAAIC,EAAI4B,EAAKC,EACf7C,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAKA,EAAE,SAAS,EACZA,EAAE,GAAK,EAAU,IAAIK,EAAKL,EAAE,IAAI,EAAE,GAAG,CAAC,EAAIA,EAAE,EAAI,EAAIA,EAAE,OAAO,EAAIA,EAAI,GAAG,GAE5Ee,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVwC,EAAM7C,EAAE,GAAG,EAEP,KAAK,IAAI6C,EAAK9B,CAAE,EAAI,EAAI,CAACf,EAAE,EAAI,EAAUC,EAAS,IAAII,EAAKL,CAAC,EAAGe,EAAIC,EAAI,EAAI,GAE/EX,EAAK,UAAYuC,EAAMC,EAAM7C,EAAE,EAE/BA,EAAI8B,GAAO9B,EAAE,KAAK,CAAC,EAAG,IAAIK,EAAK,CAAC,EAAE,MAAML,CAAC,EAAG4C,EAAM7B,EAAI,CAAC,EAEvDV,EAAK,UAAYU,EAAK,EACtBV,EAAK,SAAW,EAEhBL,EAAIA,EAAE,GAAG,EAETK,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAEThB,EAAE,MAAM,EAAG,IArBQ,IAAIK,EAAK,GAAG,CAsBxC,EAwBAN,EAAE,YAAcA,EAAE,KAAO,UAAY,CACnC,IAAI+C,EAAQ1C,EACVW,EAAIC,EACJhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAIA,EAAE,OAAO,EAAU,IAAIK,EAAKL,CAAC,GAEjCI,EAAIJ,EAAE,IAAI,EAAE,IAAI,CAAC,EACjBe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAEND,IAAM,GAGJA,IAAM,GACR0C,EAASH,GAAMtC,EAAMU,EAAK,EAAGC,CAAE,EAAE,MAAM,EAAG,EAC1C8B,EAAO,EAAI9C,EAAE,EACN8C,GAIF,IAAIzC,EAAK,GAAG,GAKrBA,EAAK,UAAYU,EAAK,EACtBV,EAAK,SAAW,EAEhBL,EAAIA,EAAE,IAAI,IAAIK,EAAK,CAAC,EAAE,MAAML,EAAE,MAAMA,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAE7DK,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAEThB,EAAE,MAAM,CAAC,GAClB,EAqBAD,EAAE,eAAiBA,EAAE,KAAO,UAAY,CACtC,IAAIQ,EAAGC,EAAGJ,EAAGiB,EAAG0B,EAAIrB,EAAG,EAAGkB,EAAKI,EAC7BhD,EAAI,KACJK,EAAOL,EAAE,YACTe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAEZ,GAAKL,EAAE,SAAS,EAOT,IAAIA,EAAE,OAAO,EAClB,OAAO,IAAIK,EAAKL,CAAC,EACZ,GAAIA,EAAE,IAAI,EAAE,GAAG,CAAC,GAAKe,EAAK,GAAKjB,GACpC,SAAI6C,GAAMtC,EAAMU,EAAK,EAAGC,CAAE,EAAE,MAAM,GAAI,EACtC,EAAE,EAAIhB,EAAE,EACD,MAZU,CACjB,GAAI,CAACA,EAAE,EAAG,OAAO,IAAIK,EAAK,GAAG,EAC7B,GAAIU,EAAK,GAAKjB,GACZ,SAAI6C,GAAMtC,EAAMU,EAAK,EAAGC,CAAE,EAAE,MAAM,EAAG,EACrC,EAAE,EAAIhB,EAAE,EACD,CAEX,CAmBA,IAXAK,EAAK,UAAYuC,EAAM7B,EAAK,GAC5BV,EAAK,SAAW,EAQhBD,EAAI,KAAK,IAAI,GAAIwC,EAAMjD,EAAW,EAAI,CAAC,EAElCY,EAAIH,EAAGG,EAAG,EAAEA,EAAGP,EAAIA,EAAE,IAAIA,EAAE,MAAMA,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAW/D,IATAlB,EAAW,GAEX0B,EAAI,KAAK,KAAKoC,EAAMjD,CAAQ,EAC5B0B,EAAI,EACJ2B,EAAKhD,EAAE,MAAMA,CAAC,EACd,EAAI,IAAIK,EAAKL,CAAC,EACd+C,EAAK/C,EAGEO,IAAM,IAOX,GANAwC,EAAKA,EAAG,MAAMC,CAAE,EAChBtB,EAAI,EAAE,MAAMqB,EAAG,IAAI1B,GAAK,CAAC,CAAC,EAE1B0B,EAAKA,EAAG,MAAMC,CAAE,EAChB,EAAItB,EAAE,KAAKqB,EAAG,IAAI1B,GAAK,CAAC,CAAC,EAErB,EAAE,EAAEb,CAAC,IAAM,OAAQ,IAAKD,EAAIC,EAAG,EAAE,EAAED,CAAC,IAAMmB,EAAE,EAAEnB,CAAC,GAAKA,KAAK,CAG/D,OAAIH,IAAG,EAAI,EAAE,MAAM,GAAMA,EAAI,CAAE,GAE/BtB,EAAW,GAEJmB,EAAS,EAAGI,EAAK,UAAYU,EAAIV,EAAK,SAAWW,EAAI,EAAI,CAClE,EAOAjB,EAAE,SAAW,UAAY,CACvB,MAAO,CAAC,CAAC,KAAK,CAChB,EAOAA,EAAE,UAAYA,EAAE,MAAQ,UAAY,CAClC,MAAO,CAAC,CAAC,KAAK,GAAKX,GAAU,KAAK,EAAIO,CAAQ,EAAI,KAAK,EAAE,OAAS,CACpE,EAOAI,EAAE,MAAQ,UAAY,CACpB,MAAO,CAAC,KAAK,CACf,EAOAA,EAAE,WAAaA,EAAE,MAAQ,UAAY,CACnC,OAAO,KAAK,EAAI,CAClB,EAOAA,EAAE,WAAaA,EAAE,MAAQ,UAAY,CACnC,OAAO,KAAK,EAAI,CAClB,EAOAA,EAAE,OAAS,UAAY,CACrB,MAAO,CAAC,CAAC,KAAK,GAAK,KAAK,EAAE,CAAC,IAAM,CACnC,EAOAA,EAAE,SAAWA,EAAE,GAAK,SAAUO,EAAG,CAC/B,OAAO,KAAK,IAAIA,CAAC,EAAI,CACvB,EAOAP,EAAE,kBAAoBA,EAAE,IAAM,SAAUO,EAAG,CACzC,OAAO,KAAK,IAAIA,CAAC,EAAI,CACvB,EAiCAP,EAAE,UAAYA,EAAE,IAAM,SAAUkD,EAAM,CACpC,IAAIC,EAAUlB,EAAGmB,EAAa/C,EAAGgD,EAAKC,EAAK5B,EAAIH,EAC7CgC,EAAM,KACNjD,EAAOiD,EAAI,YACXvC,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVkD,EAAQ,EAGV,GAAIN,GAAQ,KACVA,EAAO,IAAI5C,EAAK,EAAE,EAClB6C,EAAW,OACN,CAKL,GAJAD,EAAO,IAAI5C,EAAK4C,CAAI,EACpBjB,EAAIiB,EAAK,EAGLA,EAAK,EAAI,GAAK,CAACjB,GAAK,CAACA,EAAE,CAAC,GAAKiB,EAAK,GAAG,CAAC,EAAG,OAAO,IAAI5C,EAAK,GAAG,EAEhE6C,EAAWD,EAAK,GAAG,EAAE,CACvB,CAKA,GAHAjB,EAAIsB,EAAI,EAGJA,EAAI,EAAI,GAAK,CAACtB,GAAK,CAACA,EAAE,CAAC,GAAKsB,EAAI,GAAG,CAAC,EACtC,OAAO,IAAIjD,EAAK2B,GAAK,CAACA,EAAE,CAAC,EAAI,GAAK,EAAIsB,EAAI,GAAK,EAAI,IAAMtB,EAAI,EAAI,EAAI,CAAC,EAKxE,GAAIkB,EACF,GAAIlB,EAAE,OAAS,EACboB,EAAM,OACD,CACL,IAAKhD,EAAI4B,EAAE,CAAC,EAAG5B,EAAI,KAAO,GAAIA,GAAK,GACnCgD,EAAMhD,IAAM,CACd,CAyBF,GAtBAtB,EAAW,GACX2C,EAAKV,EAAKwC,EACVF,EAAMG,GAAiBF,EAAK7B,CAAE,EAC9B0B,EAAcD,EAAWO,GAAQpD,EAAMoB,EAAK,EAAE,EAAI+B,GAAiBP,EAAMxB,CAAE,EAG3EH,EAAIQ,GAAOuB,EAAKF,EAAa1B,EAAI,CAAC,EAgB9BiC,GAAoBpC,EAAE,EAAGlB,EAAIW,EAAIC,CAAE,EAErC,EAME,IALAS,GAAM,GACN4B,EAAMG,GAAiBF,EAAK7B,CAAE,EAC9B0B,EAAcD,EAAWO,GAAQpD,EAAMoB,EAAK,EAAE,EAAI+B,GAAiBP,EAAMxB,CAAE,EAC3EH,EAAIQ,GAAOuB,EAAKF,EAAa1B,EAAI,CAAC,EAE9B,CAAC2B,EAAK,CAGJ,CAACvB,GAAeP,EAAE,CAAC,EAAE,MAAMlB,EAAI,EAAGA,EAAI,EAAE,EAAI,GAAK,OACnDkB,EAAIrB,EAASqB,EAAGP,EAAK,EAAG,CAAC,GAG3B,KACF,OACO2C,GAAoBpC,EAAE,EAAGlB,GAAK,GAAIY,CAAE,GAG/C,OAAAlC,EAAW,GAEJmB,EAASqB,EAAGP,EAAIC,CAAE,CAC3B,EAgDAjB,EAAE,MAAQA,EAAE,IAAM,SAAUO,EAAG,CAC7B,IAAI0B,EAAGb,EAAG,EAAGX,EAAGJ,EAAG6B,EAAKlB,EAAIC,EAAIL,EAAIgD,EAAIC,EAAMhD,EAC5CZ,EAAI,KACJK,EAAOL,EAAE,YAKX,GAHAM,EAAI,IAAID,EAAKC,CAAC,EAGV,CAACN,EAAE,GAAK,CAACM,EAAE,EAGb,MAAI,CAACN,EAAE,GAAK,CAACM,EAAE,EAAGA,EAAI,IAAID,EAAK,GAAG,EAGzBL,EAAE,EAAGM,EAAE,EAAI,CAACA,EAAE,EAKlBA,EAAI,IAAID,EAAKC,EAAE,GAAKN,EAAE,IAAMM,EAAE,EAAIN,EAAI,GAAG,EAEvCM,EAIT,GAAIN,EAAE,GAAKM,EAAE,EACX,OAAAA,EAAE,EAAI,CAACA,EAAE,EACFN,EAAE,KAAKM,CAAC,EASjB,GANAK,EAAKX,EAAE,EACPY,EAAKN,EAAE,EACPS,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAGN,CAACM,EAAG,CAAC,GAAK,CAACC,EAAG,CAAC,EAAG,CAGpB,GAAIA,EAAG,CAAC,EAAGN,EAAE,EAAI,CAACA,EAAE,UAGXK,EAAG,CAAC,EAAGL,EAAI,IAAID,EAAKL,CAAC,MAIzB,QAAO,IAAIK,EAAKW,IAAO,EAAI,GAAK,CAAC,EAEtC,OAAOlC,EAAWmB,EAASK,EAAGS,EAAIC,CAAE,EAAIV,CAC1C,CAYA,GAPAa,EAAI/B,GAAUkB,EAAE,EAAIX,CAAQ,EAC5BgE,EAAKvE,GAAUY,EAAE,EAAIL,CAAQ,EAE7BgB,EAAKA,EAAG,MAAM,EACdP,EAAIuD,EAAKxC,EAGLf,EAAG,CAyBL,IAxBAwD,EAAOxD,EAAI,EAEPwD,GACF5B,EAAIrB,EACJP,EAAI,CAACA,EACL6B,EAAMrB,EAAG,SAEToB,EAAIpB,EACJO,EAAIwC,EACJ1B,EAAMtB,EAAG,QAMX,EAAI,KAAK,IAAI,KAAK,KAAKI,EAAKpB,CAAQ,EAAGsC,CAAG,EAAI,EAE1C7B,EAAI,IACNA,EAAI,EACJ4B,EAAE,OAAS,GAIbA,EAAE,QAAQ,EACL,EAAI5B,EAAG,KAAM4B,EAAE,KAAK,CAAC,EAC1BA,EAAE,QAAQ,CAGZ,KAAO,CASL,IALA,EAAIrB,EAAG,OACPsB,EAAMrB,EAAG,OACTgD,EAAO,EAAI3B,EACP2B,IAAM3B,EAAM,GAEX,EAAI,EAAG,EAAIA,EAAK,IACnB,GAAItB,EAAG,CAAC,GAAKC,EAAG,CAAC,EAAG,CAClBgD,EAAOjD,EAAG,CAAC,EAAIC,EAAG,CAAC,EACnB,KACF,CAGFR,EAAI,CACN,CAaA,IAXIwD,IACF5B,EAAIrB,EACJA,EAAKC,EACLA,EAAKoB,EACL1B,EAAE,EAAI,CAACA,EAAE,GAGX2B,EAAMtB,EAAG,OAIJ,EAAIC,EAAG,OAASqB,EAAK,EAAI,EAAG,EAAE,EAAGtB,EAAGsB,GAAK,EAAI,EAGlD,IAAK,EAAIrB,EAAG,OAAQ,EAAIR,GAAI,CAE1B,GAAIO,EAAG,EAAE,CAAC,EAAIC,EAAG,CAAC,EAAG,CACnB,IAAKJ,EAAI,EAAGA,GAAKG,EAAG,EAAEH,CAAC,IAAM,GAAIG,EAAGH,CAAC,EAAId,GAAO,EAChD,EAAEiB,EAAGH,CAAC,EACNG,EAAG,CAAC,GAAKjB,EACX,CAEAiB,EAAG,CAAC,GAAKC,EAAG,CAAC,CACf,CAGA,KAAOD,EAAG,EAAEsB,CAAG,IAAM,GAAItB,EAAG,IAAI,EAGhC,KAAOA,EAAG,CAAC,IAAM,EAAGA,EAAG,MAAM,EAAG,EAAEQ,EAGlC,OAAKR,EAAG,CAAC,GAETL,EAAE,EAAIK,EACNL,EAAE,EAAIuD,GAAkBlD,EAAIQ,CAAC,EAEtBrC,EAAWmB,EAASK,EAAGS,EAAIC,CAAE,EAAIV,GALrB,IAAID,EAAKW,IAAO,EAAI,GAAK,CAAC,CAM/C,EA2BAjB,EAAE,OAASA,EAAE,IAAM,SAAUO,EAAG,CAC9B,IAAIwD,EACF9D,EAAI,KACJK,EAAOL,EAAE,YAKX,OAHAM,EAAI,IAAID,EAAKC,CAAC,EAGV,CAACN,EAAE,GAAK,CAACM,EAAE,GAAKA,EAAE,GAAK,CAACA,EAAE,EAAE,CAAC,EAAU,IAAID,EAAK,GAAG,EAGnD,CAACC,EAAE,GAAKN,EAAE,GAAK,CAACA,EAAE,EAAE,CAAC,EAChBC,EAAS,IAAII,EAAKL,CAAC,EAAGK,EAAK,UAAWA,EAAK,QAAQ,GAI5DvB,EAAW,GAEPuB,EAAK,QAAU,GAIjByD,EAAIhC,GAAO9B,EAAGM,EAAE,IAAI,EAAG,EAAG,EAAG,CAAC,EAC9BwD,EAAE,GAAKxD,EAAE,GAETwD,EAAIhC,GAAO9B,EAAGM,EAAG,EAAGD,EAAK,OAAQ,CAAC,EAGpCyD,EAAIA,EAAE,MAAMxD,CAAC,EAEbxB,EAAW,GAEJkB,EAAE,MAAM8D,CAAC,EAClB,EASA/D,EAAE,mBAAqBA,EAAE,IAAM,UAAY,CACzC,OAAOgE,GAAmB,IAAI,CAChC,EAQAhE,EAAE,iBAAmBA,EAAE,GAAK,UAAY,CACtC,OAAOyD,GAAiB,IAAI,CAC9B,EAQAzD,EAAE,QAAUA,EAAE,IAAM,UAAY,CAC9B,IAAIC,EAAI,IAAI,KAAK,YAAY,IAAI,EACjC,OAAAA,EAAE,EAAI,CAACA,EAAE,EACFC,EAASD,CAAC,CACnB,EAwBAD,EAAE,KAAOA,EAAE,IAAM,SAAUO,EAAG,CAC5B,IAAI0D,EAAOhC,EAAGb,EAAGZ,EAAGH,EAAG6B,EAAKlB,EAAIC,EAAIL,EAAIC,EACtCZ,EAAI,KACJK,EAAOL,EAAE,YAKX,GAHAM,EAAI,IAAID,EAAKC,CAAC,EAGV,CAACN,EAAE,GAAK,CAACM,EAAE,EAGb,MAAI,CAACN,EAAE,GAAK,CAACM,EAAE,EAAGA,EAAI,IAAID,EAAK,GAAG,EAMxBL,EAAE,IAAGM,EAAI,IAAID,EAAKC,EAAE,GAAKN,EAAE,IAAMM,EAAE,EAAIN,EAAI,GAAG,GAEjDM,EAIT,GAAIN,EAAE,GAAKM,EAAE,EACX,OAAAA,EAAE,EAAI,CAACA,EAAE,EACFN,EAAE,MAAMM,CAAC,EASlB,GANAK,EAAKX,EAAE,EACPY,EAAKN,EAAE,EACPS,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAGN,CAACM,EAAG,CAAC,GAAK,CAACC,EAAG,CAAC,EAIjB,OAAKA,EAAG,CAAC,IAAGN,EAAI,IAAID,EAAKL,CAAC,GAEnBlB,EAAWmB,EAASK,EAAGS,EAAIC,CAAE,EAAIV,EAa1C,GAPAF,EAAIhB,GAAUY,EAAE,EAAIL,CAAQ,EAC5BwB,EAAI/B,GAAUkB,EAAE,EAAIX,CAAQ,EAE5BgB,EAAKA,EAAG,MAAM,EACdJ,EAAIH,EAAIe,EAGJZ,EAAG,CAuBL,IArBIA,EAAI,GACNyB,EAAIrB,EACJJ,EAAI,CAACA,EACL0B,EAAMrB,EAAG,SAEToB,EAAIpB,EACJO,EAAIf,EACJ6B,EAAMtB,EAAG,QAIXP,EAAI,KAAK,KAAKW,EAAKpB,CAAQ,EAC3BsC,EAAM7B,EAAI6B,EAAM7B,EAAI,EAAI6B,EAAM,EAE1B1B,EAAI0B,IACN1B,EAAI0B,EACJD,EAAE,OAAS,GAIbA,EAAE,QAAQ,EACHzB,KAAMyB,EAAE,KAAK,CAAC,EACrBA,EAAE,QAAQ,CACZ,CAcA,IAZAC,EAAMtB,EAAG,OACTJ,EAAIK,EAAG,OAGHqB,EAAM1B,EAAI,IACZA,EAAI0B,EACJD,EAAIpB,EACJA,EAAKD,EACLA,EAAKqB,GAIFgC,EAAQ,EAAGzD,GACdyD,GAASrD,EAAG,EAAEJ,CAAC,EAAII,EAAGJ,CAAC,EAAIK,EAAGL,CAAC,EAAIyD,GAAStE,GAAO,EACnDiB,EAAGJ,CAAC,GAAKb,GAUX,IAPIsE,IACFrD,EAAG,QAAQqD,CAAK,EAChB,EAAE7C,GAKCc,EAAMtB,EAAG,OAAQA,EAAG,EAAEsB,CAAG,GAAK,GAAItB,EAAG,IAAI,EAE9C,OAAAL,EAAE,EAAIK,EACNL,EAAE,EAAIuD,GAAkBlD,EAAIQ,CAAC,EAEtBrC,EAAWmB,EAASK,EAAGS,EAAIC,CAAE,EAAIV,CAC1C,EASAP,EAAE,UAAYA,EAAE,GAAK,SAAUkE,EAAG,CAChC,IAAI7D,EACFJ,EAAI,KAEN,GAAIiE,IAAM,QAAUA,IAAM,CAAC,CAACA,GAAKA,IAAM,GAAKA,IAAM,EAAG,MAAM,MAAMjF,GAAkBiF,CAAC,EAEpF,OAAIjE,EAAE,GACJI,EAAI8D,GAAalE,EAAE,CAAC,EAChBiE,GAAKjE,EAAE,EAAI,EAAII,IAAGA,EAAIJ,EAAE,EAAI,IAEhCI,EAAI,IAGCA,CACT,EAQAL,EAAE,MAAQ,UAAY,CACpB,IAAIC,EAAI,KACNK,EAAOL,EAAE,YAEX,OAAOC,EAAS,IAAII,EAAKL,CAAC,EAAGA,EAAE,EAAI,EAAGK,EAAK,QAAQ,CACrD,EAkBAN,EAAE,KAAOA,EAAE,IAAM,UAAY,CAC3B,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAKA,EAAE,SAAS,EACZA,EAAE,OAAO,EAAU,IAAIK,EAAKL,CAAC,GAEjCe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,KAAK,IAAIf,EAAE,EAAGA,EAAE,GAAG,CAAC,EAAIL,EAC9CU,EAAK,SAAW,EAEhBL,EAAImE,GAAK9D,EAAMa,GAAiBb,EAAML,CAAC,CAAC,EAExCK,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAETf,EAASpB,GAAW,EAAImB,EAAE,IAAI,EAAIA,EAAGe,EAAIC,EAAI,EAAI,GAb9B,IAAIX,EAAK,GAAG,CAcxC,EAeAN,EAAE,WAAaA,EAAE,KAAO,UAAY,CAClC,IAAIqB,EAAGC,EAAGI,EAAIH,EAAGC,EAAKG,EACpB1B,EAAI,KACJgC,EAAIhC,EAAE,EACNmB,EAAInB,EAAE,EACNwB,EAAIxB,EAAE,EACNK,EAAOL,EAAE,YAGX,GAAIwB,IAAM,GAAK,CAACQ,GAAK,CAACA,EAAE,CAAC,EACvB,OAAO,IAAI3B,EAAK,CAACmB,GAAKA,EAAI,IAAM,CAACQ,GAAKA,EAAE,CAAC,GAAK,IAAMA,EAAIhC,EAAI,EAAI,CAAC,EAgCnE,IA7BAlB,EAAW,GAGX0C,EAAI,KAAK,KAAK,CAACxB,CAAC,EAIZwB,GAAK,GAAKA,GAAK,EAAI,GACrBH,EAAIQ,GAAeG,CAAC,GAEfX,EAAE,OAASF,GAAK,GAAK,IAAGE,GAAK,KAClCG,EAAI,KAAK,KAAKH,CAAC,EACfF,EAAI/B,IAAW+B,EAAI,GAAK,CAAC,GAAKA,EAAI,GAAKA,EAAI,GAEvCK,GAAK,EAAI,EACXH,EAAI,KAAOF,GAEXE,EAAIG,EAAE,cAAc,EACpBH,EAAIA,EAAE,MAAM,EAAGA,EAAE,QAAQ,GAAG,EAAI,CAAC,EAAIF,GAGvCG,EAAI,IAAIjB,EAAKgB,CAAC,GAEdC,EAAI,IAAIjB,EAAKmB,EAAE,SAAS,CAAC,EAG3BC,GAAMN,EAAId,EAAK,WAAa,IAQ1B,GAJAqB,EAAIJ,EACJA,EAAII,EAAE,KAAKI,GAAO9B,EAAG0B,EAAGD,EAAK,EAAG,CAAC,CAAC,EAAE,MAAM,EAAG,EAGzCI,GAAeH,EAAE,CAAC,EAAE,MAAM,EAAGD,CAAE,KAAOJ,EAAIQ,GAAeP,EAAE,CAAC,GAAG,MAAM,EAAGG,CAAE,EAK5E,GAJAJ,EAAIA,EAAE,MAAMI,EAAK,EAAGA,EAAK,CAAC,EAItBJ,GAAK,QAAU,CAACE,GAAOF,GAAK,OAAQ,CAItC,GAAI,CAACE,IACHtB,EAASyB,EAAGP,EAAI,EAAG,CAAC,EAEhBO,EAAE,MAAMA,CAAC,EAAE,GAAG1B,CAAC,GAAG,CACpBsB,EAAII,EACJ,KACF,CAGFD,GAAM,EACNF,EAAM,CACR,KAAO,EAID,CAAC,CAACF,GAAK,CAAC,CAACA,EAAE,MAAM,CAAC,GAAKA,EAAE,OAAO,CAAC,GAAK,OAGxCpB,EAASqB,EAAGH,EAAI,EAAG,CAAC,EACpBC,EAAI,CAACE,EAAE,MAAMA,CAAC,EAAE,GAAGtB,CAAC,GAGtB,KACF,CAIJ,OAAAlB,EAAW,GAEJmB,EAASqB,EAAGH,EAAGd,EAAK,SAAUe,CAAC,CACxC,EAgBArB,EAAE,QAAUA,EAAE,IAAM,UAAY,CAC9B,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAKA,EAAE,SAAS,EACZA,EAAE,OAAO,EAAU,IAAIK,EAAKL,CAAC,GAEjCe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,GACtBV,EAAK,SAAW,EAEhBL,EAAIA,EAAE,IAAI,EACVA,EAAE,EAAI,EACNA,EAAI8B,GAAO9B,EAAG,IAAIK,EAAK,CAAC,EAAE,MAAML,EAAE,MAAMA,CAAC,CAAC,EAAE,KAAK,EAAGe,EAAK,GAAI,CAAC,EAE9DV,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAETf,EAASpB,IAAY,GAAKA,IAAY,EAAImB,EAAE,IAAI,EAAIA,EAAGe,EAAIC,EAAI,EAAI,GAfhD,IAAIX,EAAK,GAAG,CAgBxC,EAwBAN,EAAE,MAAQA,EAAE,IAAM,SAAUO,EAAG,CAC7B,IAAI0D,EAAO7C,EAAG,EAAGf,EAAGkB,EAAG8C,EAAI1C,EAAGjB,EAAKC,EACjCV,EAAI,KACJK,EAAOL,EAAE,YACTW,EAAKX,EAAE,EACPY,GAAMN,EAAI,IAAID,EAAKC,CAAC,GAAG,EAKzB,GAHAA,EAAE,GAAKN,EAAE,EAGL,CAACW,GAAM,CAACA,EAAG,CAAC,GAAK,CAACC,GAAM,CAACA,EAAG,CAAC,EAE/B,OAAO,IAAIP,EAAK,CAACC,EAAE,GAAKK,GAAM,CAACA,EAAG,CAAC,GAAK,CAACC,GAAMA,GAAM,CAACA,EAAG,CAAC,GAAK,CAACD,EAI5D,IAIA,CAACA,GAAM,CAACC,EAAKN,EAAE,EAAI,EAAIA,EAAE,EAAI,CAAC,EAoBpC,IAjBAa,EAAI/B,GAAUY,EAAE,EAAIL,CAAQ,EAAIP,GAAUkB,EAAE,EAAIX,CAAQ,EACxDc,EAAME,EAAG,OACTD,EAAME,EAAG,OAGLH,EAAMC,IACRY,EAAIX,EACJA,EAAKC,EACLA,EAAKU,EACL8C,EAAK3D,EACLA,EAAMC,EACNA,EAAM0D,GAIR9C,EAAI,CAAC,EACL8C,EAAK3D,EAAMC,EACN,EAAI0D,EAAI,KAAM9C,EAAE,KAAK,CAAC,EAG3B,IAAK,EAAIZ,EAAK,EAAE,GAAK,GAAI,CAEvB,IADAsD,EAAQ,EACH5D,EAAIK,EAAM,EAAGL,EAAI,GACpBsB,EAAIJ,EAAElB,CAAC,EAAIQ,EAAG,CAAC,EAAID,EAAGP,EAAI,EAAI,CAAC,EAAI4D,EACnC1C,EAAElB,GAAG,EAAIsB,EAAIhC,GAAO,EACpBsE,EAAQtC,EAAIhC,GAAO,EAGrB4B,EAAElB,CAAC,GAAKkB,EAAElB,CAAC,EAAI4D,GAAStE,GAAO,CACjC,CAGA,KAAO,CAAC4B,EAAE,EAAE8C,CAAE,GAAI9C,EAAE,IAAI,EAExB,OAAI0C,EAAO,EAAE7C,EACRG,EAAE,MAAM,EAEbhB,EAAE,EAAIgB,EACNhB,EAAE,EAAIuD,GAAkBvC,EAAGH,CAAC,EAErBrC,EAAWmB,EAASK,EAAGD,EAAK,UAAWA,EAAK,QAAQ,EAAIC,CACjE,EAaAP,EAAE,SAAW,SAAU0B,EAAIT,EAAI,CAC7B,OAAOqD,GAAe,KAAM,EAAG5C,EAAIT,CAAE,CACvC,EAaAjB,EAAE,gBAAkBA,EAAE,KAAO,SAAUuE,EAAItD,EAAI,CAC7C,IAAIhB,EAAI,KACNK,EAAOL,EAAE,YAGX,OADAA,EAAI,IAAIK,EAAKL,CAAC,EACVsE,IAAO,OAAetE,GAE1BuE,GAAWD,EAAI,EAAG/F,EAAU,EAExByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,EAEjBf,EAASD,EAAGsE,EAAKtE,EAAE,EAAI,EAAGgB,CAAE,EACrC,EAWAjB,EAAE,cAAgB,SAAUuE,EAAItD,EAAI,CAClC,IAAIwD,EACFxE,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAIsE,IAAO,OACTE,EAAMC,GAAezE,EAAG,EAAI,GAE5BuE,GAAWD,EAAI,EAAG/F,EAAU,EAExByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,EAExBhB,EAAIC,EAAS,IAAII,EAAKL,CAAC,EAAGsE,EAAK,EAAGtD,CAAE,EACpCwD,EAAMC,GAAezE,EAAG,GAAMsE,EAAK,CAAC,GAG/BtE,EAAE,MAAM,GAAK,CAACA,EAAE,OAAO,EAAI,IAAMwE,EAAMA,CAChD,EAmBAzE,EAAE,QAAU,SAAUuE,EAAItD,EAAI,CAC5B,IAAIwD,EAAKlE,EACPN,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAIsE,IAAO,OACTE,EAAMC,GAAezE,CAAC,GAEtBuE,GAAWD,EAAI,EAAG/F,EAAU,EAExByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,EAExBV,EAAIL,EAAS,IAAII,EAAKL,CAAC,EAAGsE,EAAKtE,EAAE,EAAI,EAAGgB,CAAE,EAC1CwD,EAAMC,GAAenE,EAAG,GAAOgE,EAAKhE,EAAE,EAAI,CAAC,GAKtCN,EAAE,MAAM,GAAK,CAACA,EAAE,OAAO,EAAI,IAAMwE,EAAMA,CAChD,EAcAzE,EAAE,WAAa,SAAU2E,EAAM,CAC7B,IAAI1C,EAAG2C,EAAIC,EAAIC,EAAI1D,EAAGf,EAAGiB,EAAGyD,EAAIC,EAAIhE,EAAI+C,EAAGxC,EACzCtB,EAAI,KACJW,EAAKX,EAAE,EACPK,EAAOL,EAAE,YAEX,GAAI,CAACW,EAAI,OAAO,IAAIN,EAAKL,CAAC,EAU1B,GARA+E,EAAKJ,EAAK,IAAItE,EAAK,CAAC,EACpBuE,EAAKE,EAAK,IAAIzE,EAAK,CAAC,EAEpB2B,EAAI,IAAI3B,EAAKuE,CAAE,EACfzD,EAAIa,EAAE,EAAIkC,GAAavD,CAAE,EAAIX,EAAE,EAAI,EACnCI,EAAIe,EAAIxB,EACRqC,EAAE,EAAE,CAAC,EAAI3C,GAAQ,GAAIe,EAAI,EAAIT,EAAWS,EAAIA,CAAC,EAEzCsE,GAAQ,KAGVA,EAAOvD,EAAI,EAAIa,EAAI+C,MACd,CAEL,GADA1D,EAAI,IAAIhB,EAAKqE,CAAI,EACb,CAACrD,EAAE,MAAM,GAAKA,EAAE,GAAG0D,CAAE,EAAG,MAAM,MAAM/F,GAAkBqC,CAAC,EAC3DqD,EAAOrD,EAAE,GAAGW,CAAC,EAAKb,EAAI,EAAIa,EAAI+C,EAAM1D,CACtC,CAOA,IALAvC,EAAW,GACXuC,EAAI,IAAIhB,EAAKwB,GAAelB,CAAE,CAAC,EAC/BI,EAAKV,EAAK,UACVA,EAAK,UAAYc,EAAIR,EAAG,OAAShB,EAAW,EAG1CmE,EAAIhC,GAAOT,EAAGW,EAAG,EAAG,EAAG,CAAC,EACxB6C,EAAKF,EAAG,KAAKb,EAAE,MAAMc,CAAE,CAAC,EACpBC,EAAG,IAAIH,CAAI,GAAK,GACpBC,EAAKC,EACLA,EAAKC,EACLA,EAAKE,EACLA,EAAKD,EAAG,KAAKhB,EAAE,MAAMe,CAAE,CAAC,EACxBC,EAAKD,EACLA,EAAK7C,EACLA,EAAIX,EAAE,MAAMyC,EAAE,MAAMe,CAAE,CAAC,EACvBxD,EAAIwD,EAGN,OAAAA,EAAK/C,GAAO4C,EAAK,MAAMC,CAAE,EAAGC,EAAI,EAAG,EAAG,CAAC,EACvCE,EAAKA,EAAG,KAAKD,EAAG,MAAME,CAAE,CAAC,EACzBJ,EAAKA,EAAG,KAAKE,EAAG,MAAMD,CAAE,CAAC,EACzBE,EAAG,EAAIC,EAAG,EAAI/E,EAAE,EAGhBsB,EAAIQ,GAAOiD,EAAIH,EAAIzD,EAAG,CAAC,EAAE,MAAMnB,CAAC,EAAE,IAAI,EAAE,IAAI8B,GAAOgD,EAAIH,EAAIxD,EAAG,CAAC,EAAE,MAAMnB,CAAC,EAAE,IAAI,CAAC,EAAI,EAC7E,CAAC+E,EAAIH,CAAE,EAAI,CAACE,EAAIH,CAAE,EAExBtE,EAAK,UAAYU,EACjBjC,EAAW,GAEJwC,CACT,EAaAvB,EAAE,cAAgBA,EAAE,MAAQ,SAAU0B,EAAIT,EAAI,CAC5C,OAAOqD,GAAe,KAAM,GAAI5C,EAAIT,CAAE,CACxC,EAmBAjB,EAAE,UAAY,SAAUO,EAAGU,EAAI,CAC7B,IAAIhB,EAAI,KACNK,EAAOL,EAAE,YAIX,GAFAA,EAAI,IAAIK,EAAKL,CAAC,EAEVM,GAAK,KAAM,CAGb,GAAI,CAACN,EAAE,EAAG,OAAOA,EAEjBM,EAAI,IAAID,EAAK,CAAC,EACdW,EAAKX,EAAK,QACZ,KAAO,CASL,GARAC,EAAI,IAAID,EAAKC,CAAC,EACVU,IAAO,OACTA,EAAKX,EAAK,SAEVkE,GAAWvD,EAAI,EAAG,CAAC,EAIjB,CAAChB,EAAE,EAAG,OAAOM,EAAE,EAAIN,EAAIM,EAG3B,GAAI,CAACA,EAAE,EACL,OAAIA,EAAE,IAAGA,EAAE,EAAIN,EAAE,GACVM,CAEX,CAGA,OAAIA,EAAE,EAAE,CAAC,GACPxB,EAAW,GACXkB,EAAI8B,GAAO9B,EAAGM,EAAG,EAAGU,EAAI,CAAC,EAAE,MAAMV,CAAC,EAClCxB,EAAW,GACXmB,EAASD,CAAC,IAIVM,EAAE,EAAIN,EAAE,EACRA,EAAIM,GAGCN,CACT,EAQAD,EAAE,SAAW,UAAY,CACvB,MAAO,CAAC,IACV,EAaAA,EAAE,QAAU,SAAU0B,EAAIT,EAAI,CAC5B,OAAOqD,GAAe,KAAM,EAAG5C,EAAIT,CAAE,CACvC,EA8CAjB,EAAE,QAAUA,EAAE,IAAM,SAAUO,EAAG,CAC/B,IAAI,EAAGF,EAAGW,EAAIO,EAAGN,EAAIQ,EACnBxB,EAAI,KACJK,EAAOL,EAAE,YACTgF,EAAK,EAAE1E,EAAI,IAAID,EAAKC,CAAC,GAGvB,GAAI,CAACN,EAAE,GAAK,CAACM,EAAE,GAAK,CAACN,EAAE,EAAE,CAAC,GAAK,CAACM,EAAE,EAAE,CAAC,EAAG,OAAO,IAAID,EAAKhB,GAAQ,CAACW,EAAGgF,CAAE,CAAC,EAIvE,GAFAhF,EAAI,IAAIK,EAAKL,CAAC,EAEVA,EAAE,GAAG,CAAC,EAAG,OAAOA,EAKpB,GAHAe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAENC,EAAE,GAAG,CAAC,EAAG,OAAOL,EAASD,EAAGe,EAAIC,CAAE,EAMtC,GAHA,EAAI5B,GAAUkB,EAAE,EAAIX,CAAQ,EAGxB,GAAKW,EAAE,EAAE,OAAS,IAAMF,EAAI4E,EAAK,EAAI,CAACA,EAAKA,IAAOpF,GACpD,OAAA0B,EAAI2D,GAAO5E,EAAML,EAAGI,EAAGW,CAAE,EAClBT,EAAE,EAAI,EAAI,IAAID,EAAK,CAAC,EAAE,IAAIiB,CAAC,EAAIrB,EAASqB,EAAGP,EAAIC,CAAE,EAM1D,GAHAQ,EAAIxB,EAAE,EAGFwB,EAAI,EAAG,CAGT,GAAI,EAAIlB,EAAE,EAAE,OAAS,EAAG,OAAO,IAAID,EAAK,GAAG,EAM3C,GAHKC,EAAE,EAAE,CAAC,EAAI,IAASkB,EAAI,GAGvBxB,EAAE,GAAK,GAAKA,EAAE,EAAE,CAAC,GAAK,GAAKA,EAAE,EAAE,QAAU,EAC3C,OAAAA,EAAE,EAAIwB,EACCxB,CAEX,CAcA,OARAI,EAAIf,GAAQ,CAACW,EAAGgF,CAAE,EAClB,EAAI5E,GAAK,GAAK,CAAC,SAASA,CAAC,EACrBhB,GAAU4F,GAAM,KAAK,IAAI,KAAOnD,GAAe7B,EAAE,CAAC,CAAC,EAAI,KAAK,KAAOA,EAAE,EAAI,EAAE,EAC3E,IAAIK,EAAKD,EAAI,EAAE,EAAE,EAKjB,EAAIC,EAAK,KAAO,GAAK,EAAIA,EAAK,KAAO,EAAU,IAAIA,EAAK,EAAI,EAAImB,EAAI,EAAI,CAAC,GAE7E1C,EAAW,GACXuB,EAAK,SAAWL,EAAE,EAAI,EAMtBI,EAAI,KAAK,IAAI,IAAK,EAAI,IAAI,MAAM,EAGhCkB,EAAIyC,GAAmBzD,EAAE,MAAMkD,GAAiBxD,EAAGe,EAAKX,CAAC,CAAC,EAAGW,CAAE,EAG3DO,EAAE,IAGJA,EAAIrB,EAASqB,EAAGP,EAAK,EAAG,CAAC,EAIrB2C,GAAoBpC,EAAE,EAAGP,EAAIC,CAAE,IACjC,EAAID,EAAK,GAGTO,EAAIrB,EAAS8D,GAAmBzD,EAAE,MAAMkD,GAAiBxD,EAAG,EAAII,CAAC,CAAC,EAAG,CAAC,EAAG,EAAI,EAAG,CAAC,EAG7E,CAACyB,GAAeP,EAAE,CAAC,EAAE,MAAMP,EAAK,EAAGA,EAAK,EAAE,EAAI,GAAK,OACrDO,EAAIrB,EAASqB,EAAGP,EAAK,EAAG,CAAC,KAK/BO,EAAE,EAAIE,EACN1C,EAAW,GACXuB,EAAK,SAAWW,EAETf,EAASqB,EAAGP,EAAIC,CAAE,EAC3B,EAcAjB,EAAE,YAAc,SAAU0B,EAAIT,EAAI,CAChC,IAAIwD,EACFxE,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAIyB,IAAO,OACT+C,EAAMC,GAAezE,EAAGA,EAAE,GAAKK,EAAK,UAAYL,EAAE,GAAKK,EAAK,QAAQ,GAEpEkE,GAAW9C,EAAI,EAAGlD,EAAU,EAExByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,EAExBhB,EAAIC,EAAS,IAAII,EAAKL,CAAC,EAAGyB,EAAIT,CAAE,EAChCwD,EAAMC,GAAezE,EAAGyB,GAAMzB,EAAE,GAAKA,EAAE,GAAKK,EAAK,SAAUoB,CAAE,GAGxDzB,EAAE,MAAM,GAAK,CAACA,EAAE,OAAO,EAAI,IAAMwE,EAAMA,CAChD,EAiBAzE,EAAE,oBAAsBA,EAAE,KAAO,SAAU0B,EAAIT,EAAI,CACjD,IAAIhB,EAAI,KACNK,EAAOL,EAAE,YAEX,OAAIyB,IAAO,QACTA,EAAKpB,EAAK,UACVW,EAAKX,EAAK,WAEVkE,GAAW9C,EAAI,EAAGlD,EAAU,EAExByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,GAGnBf,EAAS,IAAII,EAAKL,CAAC,EAAGyB,EAAIT,CAAE,CACrC,EAUAjB,EAAE,SAAW,UAAY,CACvB,IAAIC,EAAI,KACNK,EAAOL,EAAE,YACTwE,EAAMC,GAAezE,EAAGA,EAAE,GAAKK,EAAK,UAAYL,EAAE,GAAKK,EAAK,QAAQ,EAEtE,OAAOL,EAAE,MAAM,GAAK,CAACA,EAAE,OAAO,EAAI,IAAMwE,EAAMA,CAChD,EAOAzE,EAAE,UAAYA,EAAE,MAAQ,UAAY,CAClC,OAAOE,EAAS,IAAI,KAAK,YAAY,IAAI,EAAG,KAAK,EAAI,EAAG,CAAC,CAC3D,EAQAF,EAAE,QAAUA,EAAE,OAAS,UAAY,CACjC,IAAIC,EAAI,KACNK,EAAOL,EAAE,YACTwE,EAAMC,GAAezE,EAAGA,EAAE,GAAKK,EAAK,UAAYL,EAAE,GAAKK,EAAK,QAAQ,EAEtE,OAAOL,EAAE,MAAM,EAAI,IAAMwE,EAAMA,CACjC,EAoDA,SAAS3C,GAAeG,EAAG,CACzB,IAAIzB,EAAGH,EAAG8E,EACRC,EAAkBnD,EAAE,OAAS,EAC7BwC,EAAM,GACNzC,EAAIC,EAAE,CAAC,EAET,GAAImD,EAAkB,EAAG,CAEvB,IADAX,GAAOzC,EACFxB,EAAI,EAAGA,EAAI4E,EAAiB5E,IAC/B2E,EAAKlD,EAAEzB,CAAC,EAAI,GACZH,EAAIT,EAAWuF,EAAG,OACd9E,IAAGoE,GAAOY,GAAchF,CAAC,GAC7BoE,GAAOU,EAGTnD,EAAIC,EAAEzB,CAAC,EACP2E,EAAKnD,EAAI,GACT3B,EAAIT,EAAWuF,EAAG,OACd9E,IAAGoE,GAAOY,GAAchF,CAAC,EAC/B,SAAW2B,IAAM,EACf,MAAO,IAIT,KAAOA,EAAI,KAAO,GAAIA,GAAK,GAE3B,OAAOyC,EAAMzC,CACf,CAGA,SAASwC,GAAWhE,EAAGL,EAAKC,EAAK,CAC/B,GAAII,IAAM,CAAC,CAACA,GAAKA,EAAIL,GAAOK,EAAIJ,EAC9B,MAAM,MAAMnB,GAAkBuB,CAAC,CAEnC,CAQA,SAASmD,GAAoB1B,EAAGzB,EAAGS,EAAIqE,EAAW,CAChD,IAAIC,EAAIlF,EAAG,EAAGmF,EAGd,IAAKnF,EAAI4B,EAAE,CAAC,EAAG5B,GAAK,GAAIA,GAAK,GAAI,EAAEG,EAGnC,MAAI,EAAEA,EAAI,GACRA,GAAKZ,EACL2F,EAAK,IAELA,EAAK,KAAK,MAAM/E,EAAI,GAAKZ,CAAQ,EACjCY,GAAKZ,GAMPS,EAAIf,GAAQ,GAAIM,EAAWY,CAAC,EAC5BgF,EAAKvD,EAAEsD,CAAE,EAAIlF,EAAI,EAEbiF,GAAa,KACX9E,EAAI,GACFA,GAAK,EAAGgF,EAAKA,EAAK,IAAM,EACnBhF,GAAK,IAAGgF,EAAKA,EAAK,GAAK,GAChC,EAAIvE,EAAK,GAAKuE,GAAM,OAASvE,EAAK,GAAKuE,GAAM,OAASA,GAAM,KAASA,GAAM,GAE3E,GAAKvE,EAAK,GAAKuE,EAAK,GAAKnF,GAAKY,EAAK,GAAKuE,EAAK,GAAKnF,EAAI,KACnD4B,EAAEsD,EAAK,CAAC,EAAIlF,EAAI,IAAM,IAAMf,GAAQ,GAAIkB,EAAI,CAAC,EAAI,IAC/CgF,GAAMnF,EAAI,GAAKmF,GAAM,KAAOvD,EAAEsD,EAAK,CAAC,EAAIlF,EAAI,IAAM,IAAM,EAG3DG,EAAI,GACFA,GAAK,EAAGgF,EAAKA,EAAK,IAAO,EACpBhF,GAAK,EAAGgF,EAAKA,EAAK,IAAM,EACxBhF,GAAK,IAAGgF,EAAKA,EAAK,GAAK,GAChC,GAAKF,GAAarE,EAAK,IAAMuE,GAAM,MAAQ,CAACF,GAAarE,EAAK,GAAKuE,GAAM,MAEzE,IAAMF,GAAarE,EAAK,IAAMuE,EAAK,GAAKnF,GACvC,CAACiF,GAAarE,EAAK,GAAMuE,EAAK,GAAKnF,EAAI,KACrC4B,EAAEsD,EAAK,CAAC,EAAIlF,EAAI,IAAO,IAAMf,GAAQ,GAAIkB,EAAI,CAAC,EAAI,EAIlD,CACT,CAMA,SAASiF,GAAYhB,EAAKiB,EAAQC,EAAS,CAOzC,QANIlF,EACFmF,EAAM,CAAC,CAAC,EACRC,EACArF,EAAI,EACJsF,EAAOrB,EAAI,OAENjE,EAAIsF,GAAO,CAChB,IAAKD,EAAOD,EAAI,OAAQC,KAASD,EAAIC,CAAI,GAAKH,EAE9C,IADAE,EAAI,CAAC,GAAKnH,GAAS,QAAQgG,EAAI,OAAOjE,GAAG,CAAC,EACrCC,EAAI,EAAGA,EAAImF,EAAI,OAAQnF,IACtBmF,EAAInF,CAAC,EAAIkF,EAAU,IACjBC,EAAInF,EAAI,CAAC,IAAM,SAAQmF,EAAInF,EAAI,CAAC,EAAI,GACxCmF,EAAInF,EAAI,CAAC,GAAKmF,EAAInF,CAAC,EAAIkF,EAAU,EACjCC,EAAInF,CAAC,GAAKkF,EAGhB,CAEA,OAAOC,EAAI,QAAQ,CACrB,CAQA,SAAS1E,GAAOZ,EAAML,EAAG,CACvB,IAAII,EAAG6B,EAAK3B,EAEZ,GAAIN,EAAE,OAAO,EAAG,OAAOA,EAMvBiC,EAAMjC,EAAE,EAAE,OACNiC,EAAM,IACR7B,EAAI,KAAK,KAAK6B,EAAM,CAAC,EACrB3B,GAAK,EAAI6B,GAAQ,EAAG/B,CAAC,GAAG,SAAS,IAEjCA,EAAI,GACJE,EAAI,gCAGND,EAAK,WAAaD,EAElBJ,EAAIoC,GAAa/B,EAAM,EAAGL,EAAE,MAAMM,CAAC,EAAG,IAAID,EAAK,CAAC,CAAC,EAGjD,QAASE,EAAIH,EAAGG,KAAM,CACpB,IAAIuF,EAAQ9F,EAAE,MAAMA,CAAC,EACrBA,EAAI8F,EAAM,MAAMA,CAAK,EAAE,MAAMA,CAAK,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CACrD,CAEA,OAAAzF,EAAK,WAAaD,EAEXJ,CACT,CAMA,IAAI8B,GAAU,UAAY,CAGxB,SAASiE,EAAgB/F,EAAGI,EAAG6C,EAAM,CACnC,IAAI+C,EACFhC,EAAQ,EACRzD,EAAIP,EAAE,OAER,IAAKA,EAAIA,EAAE,MAAM,EAAGO,KAClByF,EAAOhG,EAAEO,CAAC,EAAIH,EAAI4D,EAClBhE,EAAEO,CAAC,EAAIyF,EAAO/C,EAAO,EACrBe,EAAQgC,EAAO/C,EAAO,EAGxB,OAAIe,GAAOhE,EAAE,QAAQgE,CAAK,EAEnBhE,CACT,CAEA,SAASiG,EAAQC,EAAGC,EAAGC,EAAIC,EAAI,CAC7B,IAAI9F,EAAGe,EAEP,GAAI8E,GAAMC,EACR/E,EAAI8E,EAAKC,EAAK,EAAI,OAElB,KAAK9F,EAAIe,EAAI,EAAGf,EAAI6F,EAAI7F,IACtB,GAAI2F,EAAE3F,CAAC,GAAK4F,EAAE5F,CAAC,EAAG,CAChBe,EAAI4E,EAAE3F,CAAC,EAAI4F,EAAE5F,CAAC,EAAI,EAAI,GACtB,KACF,CAIJ,OAAOe,CACT,CAEA,SAASgF,EAASJ,EAAGC,EAAGC,EAAInD,EAAM,CAIhC,QAHI1C,EAAI,EAGD6F,KACLF,EAAEE,CAAE,GAAK7F,EACTA,EAAI2F,EAAEE,CAAE,EAAID,EAAEC,CAAE,EAAI,EAAI,EACxBF,EAAEE,CAAE,EAAI7F,EAAI0C,EAAOiD,EAAEE,CAAE,EAAID,EAAEC,CAAE,EAIjC,KAAO,CAACF,EAAE,CAAC,GAAKA,EAAE,OAAS,GAAIA,EAAE,MAAM,CACzC,CAEA,OAAO,SAAUlG,EAAGM,EAAGS,EAAIC,EAAIsD,EAAIrB,EAAM,CACvC,IAAIsD,EAAKpF,EAAGZ,EAAGH,EAAGoG,EAASC,EAAMC,EAAMC,EAAO7C,EAAG8C,EAAIC,EAAKC,EAAMC,EAAMtF,EAAIC,EAAGsF,EAAIC,EAAIC,EACnFC,EAAIC,EACJ/G,GAAOL,EAAE,YACTqH,GAAOrH,EAAE,GAAKM,EAAE,EAAI,EAAI,GACxBK,EAAKX,EAAE,EACPY,EAAKN,EAAE,EAGT,GAAI,CAACK,GAAM,CAACA,EAAG,CAAC,GAAK,CAACC,GAAM,CAACA,EAAG,CAAC,EAE/B,OAAO,IAAIP,GACT,CAACL,EAAE,GAAK,CAACM,EAAE,IAAMK,EAAKC,GAAMD,EAAG,CAAC,GAAKC,EAAG,CAAC,EAAI,CAACA,GAAM,IAGpDD,GAAMA,EAAG,CAAC,GAAK,GAAK,CAACC,EAAKyG,GAAO,EAAIA,GAAO,CAAC,EAmBjD,IAhBIpE,GACFuD,EAAU,EACVrF,EAAInB,EAAE,EAAIM,EAAE,IAEZ2C,EAAOvD,GACP8G,EAAU7G,EACVwB,EAAI/B,GAAUY,EAAE,EAAIwG,CAAO,EAAIpH,GAAUkB,EAAE,EAAIkG,CAAO,GAGxDW,EAAKvG,EAAG,OACRqG,EAAKtG,EAAG,OACRmD,EAAI,IAAIzD,GAAKgH,EAAI,EACjBT,EAAK9C,EAAE,EAAI,CAAC,EAIPvD,EAAI,EAAGK,EAAGL,CAAC,IAAMI,EAAGJ,CAAC,GAAK,GAAIA,IAAI,CAavC,GAXIK,EAAGL,CAAC,GAAKI,EAAGJ,CAAC,GAAK,IAAIY,IAEtBJ,GAAM,MACRU,EAAKV,EAAKV,GAAK,UACfW,EAAKX,GAAK,UACDiE,EACT7C,EAAKV,GAAMf,EAAE,EAAIM,EAAE,GAAK,EAExBmB,EAAKV,EAGHU,EAAK,EACPmF,EAAG,KAAK,CAAC,EACTH,EAAO,OACF,CAOL,GAJAhF,EAAKA,EAAK+E,EAAU,EAAI,EACxBjG,EAAI,EAGA4G,GAAM,EAAG,CAMX,IALA/G,EAAI,EACJQ,EAAKA,EAAG,CAAC,EACTa,KAGQlB,EAAI0G,GAAM7G,IAAMqB,IAAMlB,IAC5BmB,EAAItB,EAAI6C,GAAQtC,EAAGJ,CAAC,GAAK,GACzBqG,EAAGrG,CAAC,EAAImB,EAAId,EAAK,EACjBR,EAAIsB,EAAId,EAAK,EAGf6F,EAAOrG,GAAKG,EAAI0G,CAGlB,KAAO,CAiBL,IAdA7G,EAAI6C,GAAQrC,EAAG,CAAC,EAAI,GAAK,EAErBR,EAAI,IACNQ,EAAKmF,EAAgBnF,EAAIR,EAAG6C,CAAI,EAChCtC,EAAKoF,EAAgBpF,EAAIP,EAAG6C,CAAI,EAChCkE,EAAKvG,EAAG,OACRqG,EAAKtG,EAAG,QAGVqG,EAAKG,EACLN,EAAMlG,EAAG,MAAM,EAAGwG,CAAE,EACpBL,EAAOD,EAAI,OAGJC,EAAOK,GAAKN,EAAIC,GAAM,EAAI,EAEjCM,EAAKxG,EAAG,MAAM,EACdwG,EAAG,QAAQ,CAAC,EACZF,EAAMtG,EAAG,CAAC,EAENA,EAAG,CAAC,GAAKqC,EAAO,GAAG,EAAEiE,EAEzB,GACE9G,EAAI,EAGJmG,EAAMN,EAAQrF,EAAIiG,EAAKM,EAAIL,CAAI,EAG3BP,EAAM,GAGRQ,EAAOF,EAAI,CAAC,EACRM,GAAML,IAAMC,EAAOA,EAAO9D,GAAQ4D,EAAI,CAAC,GAAK,IAGhDzG,EAAI2G,EAAOG,EAAM,EAUb9G,EAAI,GACFA,GAAK6C,IAAM7C,EAAI6C,EAAO,GAG1ByD,EAAOX,EAAgBnF,EAAIR,EAAG6C,CAAI,EAClC0D,EAAQD,EAAK,OACbI,EAAOD,EAAI,OAGXN,EAAMN,EAAQS,EAAMG,EAAKF,EAAOG,CAAI,EAGhCP,GAAO,IACTnG,IAGAkG,EAASI,EAAMS,EAAKR,EAAQS,EAAKxG,EAAI+F,EAAO1D,CAAI,KAO9C7C,GAAK,IAAGmG,EAAMnG,EAAI,GACtBsG,EAAO9F,EAAG,MAAM,GAGlB+F,EAAQD,EAAK,OACTC,EAAQG,GAAMJ,EAAK,QAAQ,CAAC,EAGhCJ,EAASO,EAAKH,EAAMI,EAAM7D,CAAI,EAG1BsD,GAAO,KACTO,EAAOD,EAAI,OAGXN,EAAMN,EAAQrF,EAAIiG,EAAKM,EAAIL,CAAI,EAG3BP,EAAM,IACRnG,IAGAkG,EAASO,EAAKM,EAAKL,EAAOM,EAAKxG,EAAIkG,EAAM7D,CAAI,IAIjD6D,EAAOD,EAAI,QACFN,IAAQ,IACjBnG,IACAyG,EAAM,CAAC,CAAC,GAIVD,EAAGrG,GAAG,EAAIH,EAGNmG,GAAOM,EAAI,CAAC,EACdA,EAAIC,GAAM,EAAInG,EAAGqG,CAAE,GAAK,GAExBH,EAAM,CAAClG,EAAGqG,CAAE,CAAC,EACbF,EAAO,UAGDE,IAAOC,GAAMJ,EAAI,CAAC,IAAM,SAAWpF,KAE7CgF,EAAOI,EAAI,CAAC,IAAM,MACpB,CAGKD,EAAG,CAAC,GAAGA,EAAG,MAAM,CACvB,CAGA,GAAIJ,GAAW,EACb1C,EAAE,EAAI3C,EACNvC,GAAU6H,MACL,CAGL,IAAKlG,EAAI,EAAGH,EAAIwG,EAAG,CAAC,EAAGxG,GAAK,GAAIA,GAAK,GAAIG,IACzCuD,EAAE,EAAIvD,EAAIY,EAAIqF,EAAU,EAExBvG,EAAS6D,EAAGQ,EAAKvD,EAAK+C,EAAE,EAAI,EAAI/C,EAAIC,EAAIyF,CAAI,CAC9C,CAEA,OAAO3C,CACT,CACF,EAAG,EAOF,SAAS7D,EAASD,EAAGyB,EAAIT,EAAIsG,EAAa,CACzC,IAAIC,EAAQhH,EAAGC,EAAGJ,EAAGmF,EAAIiC,EAASzF,EAAGpB,EAAI8G,EACvCpH,EAAOL,EAAE,YAGX0H,EAAK,GAAIjG,GAAM,KAAM,CAInB,GAHAd,EAAKX,EAAE,EAGH,CAACW,EAAI,OAAOX,EAWhB,IAAKuH,EAAS,EAAGnH,EAAIO,EAAG,CAAC,EAAGP,GAAK,GAAIA,GAAK,GAAImH,IAI9C,GAHAhH,EAAIkB,EAAK8F,EAGLhH,EAAI,EACNA,GAAKZ,EACLa,EAAIiB,EACJM,EAAIpB,EAAG8G,EAAM,CAAC,EAGdlC,EAAKxD,EAAI1C,GAAQ,GAAIkI,EAAS/G,EAAI,CAAC,EAAI,GAAK,UAE5CiH,EAAM,KAAK,MAAMlH,EAAI,GAAKZ,CAAQ,EAClCS,EAAIO,EAAG,OACH8G,GAAOrH,EACT,GAAIkH,EAAa,CAGf,KAAOlH,KAAOqH,GAAM9G,EAAG,KAAK,CAAC,EAC7BoB,EAAIwD,EAAK,EACTgC,EAAS,EACThH,GAAKZ,EACLa,EAAID,EAAIZ,EAAW,CACrB,KACE,OAAM+H,MAEH,CAIL,IAHA3F,EAAI3B,EAAIO,EAAG8G,CAAG,EAGTF,EAAS,EAAGnH,GAAK,GAAIA,GAAK,GAAImH,IAGnChH,GAAKZ,EAILa,EAAID,EAAIZ,EAAW4H,EAGnBhC,EAAK/E,EAAI,EAAI,EAAIuB,EAAI1C,GAAQ,GAAIkI,EAAS/G,EAAI,CAAC,EAAI,GAAK,CAC1D,CAmBF,GAfA8G,EAAcA,GAAe7F,EAAK,GAChCd,EAAG8G,EAAM,CAAC,IAAM,SAAWjH,EAAI,EAAIuB,EAAIA,EAAI1C,GAAQ,GAAIkI,EAAS/G,EAAI,CAAC,GAMvEgH,EAAUxG,EAAK,GACVuE,GAAM+B,KAAiBtG,GAAM,GAAKA,IAAOhB,EAAE,EAAI,EAAI,EAAI,IACxDuF,EAAK,GAAKA,GAAM,IAAMvE,GAAM,GAAKsG,GAAetG,GAAM,IAGpDT,EAAI,EAAIC,EAAI,EAAIuB,EAAI1C,GAAQ,GAAIkI,EAAS/G,CAAC,EAAI,EAAIG,EAAG8G,EAAM,CAAC,GAAK,GAAM,GACvEzG,IAAOhB,EAAE,EAAI,EAAI,EAAI,IAEvByB,EAAK,GAAK,CAACd,EAAG,CAAC,EACjB,OAAAA,EAAG,OAAS,EACR6G,GAGF/F,GAAMzB,EAAE,EAAI,EAGZW,EAAG,CAAC,EAAItB,GAAQ,IAAKM,EAAW8B,EAAK9B,GAAYA,CAAQ,EACzDK,EAAE,EAAI,CAACyB,GAAM,GAIbd,EAAG,CAAC,EAAIX,EAAE,EAAI,EAGTA,EAiBT,GAbIO,GAAK,GACPI,EAAG,OAAS8G,EACZrH,EAAI,EACJqH,MAEA9G,EAAG,OAAS8G,EAAM,EAClBrH,EAAIf,GAAQ,GAAIM,EAAWY,CAAC,EAI5BI,EAAG8G,CAAG,EAAIjH,EAAI,GAAKuB,EAAI1C,GAAQ,GAAIkI,EAAS/G,CAAC,EAAInB,GAAQ,GAAImB,CAAC,EAAI,GAAKJ,EAAI,GAGzEoH,EACF,OAGE,GAAIC,GAAO,EAAG,CAGZ,IAAKlH,EAAI,EAAGC,EAAIG,EAAG,CAAC,EAAGH,GAAK,GAAIA,GAAK,GAAID,IAEzC,IADAC,EAAIG,EAAG,CAAC,GAAKP,EACRA,EAAI,EAAGI,GAAK,GAAIA,GAAK,GAAIJ,IAG1BG,GAAKH,IACPJ,EAAE,IACEW,EAAG,CAAC,GAAKjB,KAAMiB,EAAG,CAAC,EAAI,IAG7B,KACF,KAAO,CAEL,GADAA,EAAG8G,CAAG,GAAKrH,EACPO,EAAG8G,CAAG,GAAK/H,GAAM,MACrBiB,EAAG8G,GAAK,EAAI,EACZrH,EAAI,CACN,CAKJ,IAAKG,EAAII,EAAG,OAAQA,EAAG,EAAEJ,CAAC,IAAM,GAAII,EAAG,IAAI,CAC7C,CAEA,OAAI7B,IAGEkB,EAAE,EAAIK,EAAK,MAGbL,EAAE,EAAI,KACNA,EAAE,EAAI,KAGGA,EAAE,EAAIK,EAAK,OAGpBL,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,IAKLA,CACT,CAGA,SAASyE,GAAezE,EAAG2H,EAAOlG,EAAI,CACpC,GAAI,CAACzB,EAAE,SAAS,EAAG,OAAO4H,GAAkB5H,CAAC,EAC7C,IAAII,EACFe,EAAInB,EAAE,EACNwE,EAAM3C,GAAe7B,EAAE,CAAC,EACxBiC,EAAMuC,EAAI,OAEZ,OAAImD,GACElG,IAAOrB,EAAIqB,EAAKQ,GAAO,EACzBuC,EAAMA,EAAI,OAAO,CAAC,EAAI,IAAMA,EAAI,MAAM,CAAC,EAAIY,GAAchF,CAAC,EACjD6B,EAAM,IACfuC,EAAMA,EAAI,OAAO,CAAC,EAAI,IAAMA,EAAI,MAAM,CAAC,GAGzCA,EAAMA,GAAOxE,EAAE,EAAI,EAAI,IAAM,MAAQA,EAAE,GAC9BmB,EAAI,GACbqD,EAAM,KAAOY,GAAc,CAACjE,EAAI,CAAC,EAAIqD,EACjC/C,IAAOrB,EAAIqB,EAAKQ,GAAO,IAAGuC,GAAOY,GAAchF,CAAC,IAC3Ce,GAAKc,GACduC,GAAOY,GAAcjE,EAAI,EAAIc,CAAG,EAC5BR,IAAOrB,EAAIqB,EAAKN,EAAI,GAAK,IAAGqD,EAAMA,EAAM,IAAMY,GAAchF,CAAC,MAE5DA,EAAIe,EAAI,GAAKc,IAAKuC,EAAMA,EAAI,MAAM,EAAGpE,CAAC,EAAI,IAAMoE,EAAI,MAAMpE,CAAC,GAC5DqB,IAAOrB,EAAIqB,EAAKQ,GAAO,IACrBd,EAAI,IAAMc,IAAKuC,GAAO,KAC1BA,GAAOY,GAAchF,CAAC,IAInBoE,CACT,CAIA,SAASX,GAAkB0D,EAAQ,EAAG,CACpC,IAAIxF,EAAIwF,EAAO,CAAC,EAGhB,IAAM,GAAK5H,EAAUoC,GAAK,GAAIA,GAAK,GAAI,IACvC,OAAO,CACT,CAGA,SAAS0B,GAAQpD,EAAMoB,EAAIV,EAAI,CAC7B,GAAIU,EAAK5B,GAGP,MAAAf,EAAW,GACPiC,IAAIV,EAAK,UAAYU,GACnB,MAAM9B,EAAsB,EAEpC,OAAOgB,EAAS,IAAII,EAAK5B,EAAI,EAAGgD,EAAI,EAAG,EAAI,CAC7C,CAGA,SAASkB,GAAMtC,EAAMoB,EAAIT,EAAI,CAC3B,GAAIS,EAAK3B,GAAc,MAAM,MAAMb,EAAsB,EACzD,OAAOgB,EAAS,IAAII,EAAK3B,EAAE,EAAG+C,EAAIT,EAAI,EAAI,CAC5C,CAGA,SAASkD,GAAaqD,EAAQ,CAC5B,IAAIxF,EAAIwF,EAAO,OAAS,EACtBtF,EAAMF,EAAIpC,EAAW,EAKvB,GAHAoC,EAAIwF,EAAOxF,CAAC,EAGRA,EAAG,CAGL,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAIE,IAG7B,IAAKF,EAAIwF,EAAO,CAAC,EAAGxF,GAAK,GAAIA,GAAK,GAAIE,GACxC,CAEA,OAAOA,CACT,CAGA,SAASmD,GAAchF,EAAG,CAExB,QADIyH,EAAK,GACFzH,KAAMyH,GAAM,IACnB,OAAOA,CACT,CAUA,SAAS5C,GAAO5E,EAAML,EAAGqB,EAAGN,EAAI,CAC9B,IAAIuG,EACFhG,EAAI,IAAIjB,EAAK,CAAC,EAIdD,EAAI,KAAK,KAAKW,EAAKpB,EAAW,CAAC,EAIjC,IAFAb,EAAW,KAEF,CAOP,GANIuC,EAAI,IACNC,EAAIA,EAAE,MAAMtB,CAAC,EACT8H,GAASxG,EAAE,EAAGlB,CAAC,IAAGkH,EAAc,KAGtCjG,EAAIjC,GAAUiC,EAAI,CAAC,EACfA,IAAM,EAAG,CAGXA,EAAIC,EAAE,EAAE,OAAS,EACbgG,GAAehG,EAAE,EAAED,CAAC,IAAM,GAAG,EAAEC,EAAE,EAAED,CAAC,EACxC,KACF,CAEArB,EAAIA,EAAE,MAAMA,CAAC,EACb8H,GAAS9H,EAAE,EAAGI,CAAC,CACjB,CAEA,OAAAtB,EAAW,GAEJwC,CACT,CAGA,SAASyG,GAAM,EAAG,CAChB,OAAO,EAAE,EAAE,EAAE,EAAE,OAAS,CAAC,EAAI,CAC/B,CAMA,SAASC,GAAS3H,EAAM4H,EAAM5G,EAAG,CAK/B,QAJIjB,EAAGE,EACLN,EAAI,IAAIK,EAAK4H,EAAK,CAAC,CAAC,EACpB1H,EAAI,EAEC,EAAEA,EAAI0H,EAAK,QAAS,CAIzB,GAHA3H,EAAI,IAAID,EAAK4H,EAAK1H,CAAC,CAAC,EAGhB,CAACD,EAAE,EAAG,CACRN,EAAIM,EACJ,KACF,CAEAF,EAAIJ,EAAE,IAAIM,CAAC,GAEPF,IAAMiB,GAAKjB,IAAM,GAAKJ,EAAE,IAAMqB,KAChCrB,EAAIM,EAER,CAEA,OAAON,CACT,CAkCA,SAAS+D,GAAmB/D,EAAGyB,EAAI,CACjC,IAAI0B,EAAaI,EAAO/C,EAAG0H,EAAKC,EAAKzG,EAAGkB,EACtCrB,EAAM,EACNhB,EAAI,EACJH,EAAI,EACJC,EAAOL,EAAE,YACTgB,EAAKX,EAAK,SACVU,EAAKV,EAAK,UAGZ,GAAI,CAACL,EAAE,GAAK,CAACA,EAAE,EAAE,CAAC,GAAKA,EAAE,EAAI,GAE3B,OAAO,IAAIK,EAAKL,EAAE,EACbA,EAAE,EAAE,CAAC,EAAQA,EAAE,EAAI,EAAI,EAAI,EAAI,EAAtB,EACVA,EAAE,EAAIA,EAAE,EAAI,EAAI,EAAIA,EAAI,EAAI,CAAC,EAanC,IAVIyB,GAAM,MACR3C,EAAW,GACX8D,EAAM7B,GAEN6B,EAAMnB,EAGRC,EAAI,IAAIrB,EAAK,MAAO,EAGbL,EAAE,EAAI,IAGXA,EAAIA,EAAE,MAAM0B,CAAC,EACbtB,GAAK,EAUP,IALAmD,EAAQ,KAAK,IAAIlE,GAAQ,EAAGe,CAAC,CAAC,EAAI,KAAK,KAAO,EAAI,EAAI,EACtDwC,GAAOW,EACPJ,EAAc+E,EAAMC,EAAM,IAAI9H,EAAK,CAAC,EACpCA,EAAK,UAAYuC,IAER,CAKP,GAJAsF,EAAMjI,EAASiI,EAAI,MAAMlI,CAAC,EAAG4C,EAAK,CAAC,EACnCO,EAAcA,EAAY,MAAM,EAAE5C,CAAC,EACnCmB,EAAIyG,EAAI,KAAKrG,GAAOoG,EAAK/E,EAAaP,EAAK,CAAC,CAAC,EAEzCf,GAAeH,EAAE,CAAC,EAAE,MAAM,EAAGkB,CAAG,IAAMf,GAAesG,EAAI,CAAC,EAAE,MAAM,EAAGvF,CAAG,EAAG,CAE7E,IADApC,EAAIJ,EACGI,KAAK2H,EAAMlI,EAASkI,EAAI,MAAMA,CAAG,EAAGvF,EAAK,CAAC,EAOjD,GAAInB,GAAM,KAER,GAAIF,EAAM,GAAKmC,GAAoByE,EAAI,EAAGvF,EAAMW,EAAOvC,EAAIO,CAAG,EAC5DlB,EAAK,UAAYuC,GAAO,GACxBO,EAAc+E,EAAMxG,EAAI,IAAIrB,EAAK,CAAC,EAClCE,EAAI,EACJgB,QAEA,QAAOtB,EAASkI,EAAK9H,EAAK,UAAYU,EAAIC,EAAIlC,EAAW,EAAI,MAG/D,QAAAuB,EAAK,UAAYU,EACVoH,CAEX,CAEAA,EAAMzG,CACR,CACF,CAkBA,SAAS8B,GAAiBlD,EAAGmB,EAAI,CAC/B,IAAI2G,EAAGC,EAAIlF,EAAahC,EAAGmH,EAAW/G,EAAK4G,EAAKzG,EAAGkB,EAAK2F,EAAIvF,EAC1D3B,EAAI,EACJkC,EAAQ,GACRvD,EAAIM,EACJK,EAAKX,EAAE,EACPK,EAAOL,EAAE,YACTgB,EAAKX,EAAK,SACVU,EAAKV,EAAK,UAGZ,GAAIL,EAAE,EAAI,GAAK,CAACW,GAAM,CAACA,EAAG,CAAC,GAAK,CAACX,EAAE,GAAKW,EAAG,CAAC,GAAK,GAAKA,EAAG,QAAU,EACjE,OAAO,IAAIN,EAAKM,GAAM,CAACA,EAAG,CAAC,EAAI,GAAK,EAAIX,EAAE,GAAK,EAAI,IAAMW,EAAK,EAAIX,CAAC,EAcrE,GAXIyB,GAAM,MACR3C,EAAW,GACX8D,EAAM7B,GAEN6B,EAAMnB,EAGRpB,EAAK,UAAYuC,GAAOW,EACxB6E,EAAIvG,GAAelB,CAAE,EACrB0H,EAAKD,EAAE,OAAO,CAAC,EAEX,KAAK,IAAIjH,EAAInB,EAAE,CAAC,EAAI,MAAQ,CAa9B,KAAOqI,EAAK,GAAKA,GAAM,GAAKA,GAAM,GAAKD,EAAE,OAAO,CAAC,EAAI,GACnDpI,EAAIA,EAAE,MAAMM,CAAC,EACb8H,EAAIvG,GAAe7B,EAAE,CAAC,EACtBqI,EAAKD,EAAE,OAAO,CAAC,EACf/G,IAGFF,EAAInB,EAAE,EAEFqI,EAAK,GACPrI,EAAI,IAAIK,EAAK,KAAO+H,CAAC,EACrBjH,KAEAnB,EAAI,IAAIK,EAAKgI,EAAK,IAAMD,EAAE,MAAM,CAAC,CAAC,CAEtC,KAKE,QAAA1G,EAAI+B,GAAQpD,EAAMuC,EAAM,EAAG7B,CAAE,EAAE,MAAMI,EAAI,EAAE,EAC3CnB,EAAIwD,GAAiB,IAAInD,EAAKgI,EAAK,IAAMD,EAAE,MAAM,CAAC,CAAC,EAAGxF,EAAMW,CAAK,EAAE,KAAK7B,CAAC,EACzErB,EAAK,UAAYU,EAEVU,GAAM,KAAOxB,EAASD,EAAGe,EAAIC,EAAIlC,EAAW,EAAI,EAAIkB,EAa7D,IATAuI,EAAKvI,EAKLmI,EAAMG,EAAYtI,EAAI8B,GAAO9B,EAAE,MAAM,CAAC,EAAGA,EAAE,KAAK,CAAC,EAAG4C,EAAK,CAAC,EAC1DI,EAAK/C,EAASD,EAAE,MAAMA,CAAC,EAAG4C,EAAK,CAAC,EAChCO,EAAc,IAEL,CAIP,GAHAmF,EAAYrI,EAASqI,EAAU,MAAMtF,CAAE,EAAGJ,EAAK,CAAC,EAChDlB,EAAIyG,EAAI,KAAKrG,GAAOwG,EAAW,IAAIjI,EAAK8C,CAAW,EAAGP,EAAK,CAAC,CAAC,EAEzDf,GAAeH,EAAE,CAAC,EAAE,MAAM,EAAGkB,CAAG,IAAMf,GAAesG,EAAI,CAAC,EAAE,MAAM,EAAGvF,CAAG,EAc1E,GAbAuF,EAAMA,EAAI,MAAM,CAAC,EAIbhH,IAAM,IAAGgH,EAAMA,EAAI,KAAK1E,GAAQpD,EAAMuC,EAAM,EAAG7B,CAAE,EAAE,MAAMI,EAAI,EAAE,CAAC,GACpEgH,EAAMrG,GAAOqG,EAAK,IAAI9H,EAAKgB,CAAC,EAAGuB,EAAK,CAAC,EAQjCnB,GAAM,KACR,GAAIiC,GAAoByE,EAAI,EAAGvF,EAAMW,EAAOvC,EAAIO,CAAG,EACjDlB,EAAK,UAAYuC,GAAOW,EACxB7B,EAAI4G,EAAYtI,EAAI8B,GAAOyG,EAAG,MAAM,CAAC,EAAGA,EAAG,KAAK,CAAC,EAAG3F,EAAK,CAAC,EAC1DI,EAAK/C,EAASD,EAAE,MAAMA,CAAC,EAAG4C,EAAK,CAAC,EAChCO,EAAc5B,EAAM,MAEpB,QAAOtB,EAASkI,EAAK9H,EAAK,UAAYU,EAAIC,EAAIlC,EAAW,EAAI,MAG/D,QAAAuB,EAAK,UAAYU,EACVoH,EAIXA,EAAMzG,EACNyB,GAAe,CACjB,CACF,CAIA,SAASyE,GAAkB5H,EAAG,CAE5B,OAAO,OAAOA,EAAE,EAAIA,EAAE,EAAI,CAAC,CAC7B,CAMA,SAASwI,GAAaxI,EAAGwE,EAAK,CAC5B,IAAIrD,EAAG,EAAGc,EAoBV,KAhBKd,EAAIqD,EAAI,QAAQ,GAAG,GAAK,KAAIA,EAAMA,EAAI,QAAQ,IAAK,EAAE,IAGrD,EAAIA,EAAI,OAAO,IAAI,GAAK,GAGvBrD,EAAI,IAAGA,EAAI,GACfA,GAAK,CAACqD,EAAI,MAAM,EAAI,CAAC,EACrBA,EAAMA,EAAI,UAAU,EAAG,CAAC,GACfrD,EAAI,IAGbA,EAAIqD,EAAI,QAIL,EAAI,EAAGA,EAAI,WAAW,CAAC,IAAM,GAAI,IAAI,CAG1C,IAAKvC,EAAMuC,EAAI,OAAQA,EAAI,WAAWvC,EAAM,CAAC,IAAM,GAAI,EAAEA,EAAI,CAG7D,GAFAuC,EAAMA,EAAI,MAAM,EAAGvC,CAAG,EAElBuC,EAAK,CAYP,GAXAvC,GAAO,EACPjC,EAAE,EAAImB,EAAIA,EAAI,EAAI,EAClBnB,EAAE,EAAI,CAAC,EAMP,GAAKmB,EAAI,GAAKxB,EACVwB,EAAI,IAAG,GAAKxB,GAEZ,EAAIsC,EAAK,CAEX,IADI,GAAGjC,EAAE,EAAE,KAAK,CAACwE,EAAI,MAAM,EAAG,CAAC,CAAC,EAC3BvC,GAAOtC,EAAU,EAAIsC,GAAMjC,EAAE,EAAE,KAAK,CAACwE,EAAI,MAAM,EAAG,GAAK7E,CAAQ,CAAC,EACrE6E,EAAMA,EAAI,MAAM,CAAC,EACjB,EAAI7E,EAAW6E,EAAI,MACrB,MACE,GAAKvC,EAGP,KAAO,KAAMuC,GAAO,IACpBxE,EAAE,EAAE,KAAK,CAACwE,CAAG,EAET1F,IAGEkB,EAAE,EAAIA,EAAE,YAAY,MAGtBA,EAAE,EAAI,KACNA,EAAE,EAAI,KAGGA,EAAE,EAAIA,EAAE,YAAY,OAG7BA,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,GAId,MAGEA,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,EAGV,OAAOA,CACT,CAMA,SAASyI,GAAWzI,EAAGwE,EAAK,CAC1B,IAAIvB,EAAM5C,EAAMqI,EAASnI,EAAGoI,EAAS1G,EAAK2G,EAAGjI,EAAIgD,EAEjD,GAAIa,EAAI,QAAQ,GAAG,EAAI,IAErB,GADAA,EAAMA,EAAI,QAAQ,eAAgB,IAAI,EAClC/E,GAAU,KAAK+E,CAAG,EAAG,OAAOgE,GAAaxI,EAAGwE,CAAG,UAC1CA,IAAQ,YAAcA,IAAQ,MACvC,MAAK,CAACA,IAAKxE,EAAE,EAAI,KACjBA,EAAE,EAAI,IACNA,EAAE,EAAI,KACCA,EAGT,GAAIT,GAAM,KAAKiF,CAAG,EAChBvB,EAAO,GACPuB,EAAMA,EAAI,YAAY,UACblF,GAAS,KAAKkF,CAAG,EAC1BvB,EAAO,UACEzD,GAAQ,KAAKgF,CAAG,EACzBvB,EAAO,MAEP,OAAM,MAAMjE,GAAkBwF,CAAG,EAgCnC,IA5BAjE,EAAIiE,EAAI,OAAO,IAAI,EAEfjE,EAAI,GACNqI,EAAI,CAACpE,EAAI,MAAMjE,EAAI,CAAC,EACpBiE,EAAMA,EAAI,UAAU,EAAGjE,CAAC,GAExBiE,EAAMA,EAAI,MAAM,CAAC,EAKnBjE,EAAIiE,EAAI,QAAQ,GAAG,EACnBmE,EAAUpI,GAAK,EACfF,EAAOL,EAAE,YAEL2I,IACFnE,EAAMA,EAAI,QAAQ,IAAK,EAAE,EACzBvC,EAAMuC,EAAI,OACVjE,EAAI0B,EAAM1B,EAGVmI,EAAUzD,GAAO5E,EAAM,IAAIA,EAAK4C,CAAI,EAAG1C,EAAGA,EAAI,CAAC,GAGjDI,EAAK6E,GAAYhB,EAAKvB,EAAMvD,EAAI,EAChCiE,EAAKhD,EAAG,OAAS,EAGZJ,EAAIoD,EAAIhD,EAAGJ,CAAC,IAAM,EAAG,EAAEA,EAAGI,EAAG,IAAI,EACtC,OAAIJ,EAAI,EAAU,IAAIF,EAAKL,EAAE,EAAI,CAAC,GAClCA,EAAE,EAAI6D,GAAkBlD,EAAIgD,CAAE,EAC9B3D,EAAE,EAAIW,EACN7B,EAAW,GAQP6J,IAAS3I,EAAI8B,GAAO9B,EAAG0I,EAASzG,EAAM,CAAC,GAGvC2G,IAAG5I,EAAIA,EAAE,MAAM,KAAK,IAAI4I,CAAC,EAAI,GAAKvJ,GAAQ,EAAGuJ,CAAC,EAAIC,GAAQ,IAAI,EAAGD,CAAC,CAAC,GACvE9J,EAAW,GAEJkB,EACT,CAQA,SAASmE,GAAK9D,EAAML,EAAG,CACrB,IAAII,EACF6B,EAAMjC,EAAE,EAAE,OAEZ,GAAIiC,EAAM,EACR,OAAOjC,EAAE,OAAO,EAAIA,EAAIoC,GAAa/B,EAAM,EAAGL,EAAGA,CAAC,EAQpDI,EAAI,IAAM,KAAK,KAAK6B,CAAG,EACvB7B,EAAIA,EAAI,GAAK,GAAKA,EAAI,EAEtBJ,EAAIA,EAAE,MAAM,EAAImC,GAAQ,EAAG/B,CAAC,CAAC,EAC7BJ,EAAIoC,GAAa/B,EAAM,EAAGL,EAAGA,CAAC,EAO9B,QAJI8I,EACFtG,EAAK,IAAInC,EAAK,CAAC,EACfoC,EAAM,IAAIpC,EAAK,EAAE,EACjBqC,EAAM,IAAIrC,EAAK,EAAE,EACZD,KACL0I,EAAS9I,EAAE,MAAMA,CAAC,EAClBA,EAAIA,EAAE,MAAMwC,EAAG,KAAKsG,EAAO,MAAMrG,EAAI,MAAMqG,CAAM,EAAE,MAAMpG,CAAG,CAAC,CAAC,CAAC,EAGjE,OAAO1C,CACT,CAIA,SAASoC,GAAa/B,EAAMgB,EAAGrB,EAAGM,EAAGyI,EAAc,CACjD,IAAIvI,EAAGkB,EAAGsH,EAAGhG,EACXzC,EAAI,EACJQ,EAAKV,EAAK,UACVD,EAAI,KAAK,KAAKW,EAAKpB,CAAQ,EAM7B,IAJAb,EAAW,GACXkE,EAAKhD,EAAE,MAAMA,CAAC,EACdgJ,EAAI,IAAI3I,EAAKC,CAAC,IAEL,CAMP,GALAoB,EAAII,GAAOkH,EAAE,MAAMhG,CAAE,EAAG,IAAI3C,EAAKgB,IAAMA,GAAG,EAAGN,EAAI,CAAC,EAClDiI,EAAID,EAAezI,EAAE,KAAKoB,CAAC,EAAIpB,EAAE,MAAMoB,CAAC,EACxCpB,EAAIwB,GAAOJ,EAAE,MAAMsB,CAAE,EAAG,IAAI3C,EAAKgB,IAAMA,GAAG,EAAGN,EAAI,CAAC,EAClDW,EAAIsH,EAAE,KAAK1I,CAAC,EAERoB,EAAE,EAAEtB,CAAC,IAAM,OAAQ,CACrB,IAAKI,EAAIJ,EAAGsB,EAAE,EAAElB,CAAC,IAAMwI,EAAE,EAAExI,CAAC,GAAKA,KAAK,CACtC,GAAIA,GAAK,GAAI,KACf,CAEAA,EAAIwI,EACJA,EAAI1I,EACJA,EAAIoB,EACJA,EAAIlB,EACJD,GACF,CAEA,OAAAzB,EAAW,GACX4C,EAAE,EAAE,OAAStB,EAAI,EAEVsB,CACT,CAIA,SAASS,GAAQgE,EAAG,EAAG,CAErB,QADI9E,EAAI8E,EACD,EAAE,GAAG9E,GAAK8E,EACjB,OAAO9E,CACT,CAIA,SAASH,GAAiBb,EAAML,EAAG,CACjC,IAAI,EACFiJ,EAAQjJ,EAAE,EAAI,EACdkJ,EAAKvG,GAAMtC,EAAMA,EAAK,UAAW,CAAC,EAClCyC,EAASoG,EAAG,MAAM,EAAG,EAIvB,GAFAlJ,EAAIA,EAAE,IAAI,EAENA,EAAE,IAAI8C,CAAM,EACd,OAAAjE,GAAWoK,EAAQ,EAAI,EAChBjJ,EAKT,GAFA,EAAIA,EAAE,SAASkJ,CAAE,EAEb,EAAE,OAAO,EACXrK,GAAWoK,EAAQ,EAAI,MAClB,CAIL,GAHAjJ,EAAIA,EAAE,MAAM,EAAE,MAAMkJ,CAAE,CAAC,EAGnBlJ,EAAE,IAAI8C,CAAM,EACd,OAAAjE,GAAWkJ,GAAM,CAAC,EAAKkB,EAAQ,EAAI,EAAMA,EAAQ,EAAI,EAC9CjJ,EAGTnB,GAAWkJ,GAAM,CAAC,EAAKkB,EAAQ,EAAI,EAAMA,EAAQ,EAAI,CACvD,CAEA,OAAOjJ,EAAE,MAAMkJ,CAAE,EAAE,IAAI,CACzB,CAQA,SAAS7E,GAAerE,EAAG0F,EAASjE,EAAIT,EAAI,CAC1C,IAAIiC,EAAM9B,EAAGZ,EAAGH,EAAG6B,EAAKuF,EAAShD,EAAK7D,EAAIL,EACxCD,EAAOL,EAAE,YACT2H,EAAQlG,IAAO,OAWjB,GATIkG,GACFpD,GAAW9C,EAAI,EAAGlD,EAAU,EACxByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,IAExBS,EAAKpB,EAAK,UACVW,EAAKX,EAAK,UAGR,CAACL,EAAE,SAAS,EACdwE,EAAMoD,GAAkB5H,CAAC,MACpB,CAoCL,IAnCAwE,EAAMC,GAAezE,CAAC,EACtBO,EAAIiE,EAAI,QAAQ,GAAG,EAOfmD,GACF1E,EAAO,EACHyC,GAAW,GACbjE,EAAKA,EAAK,EAAI,EACLiE,GAAW,IACpBjE,EAAKA,EAAK,EAAI,IAGhBwB,EAAOyC,EAOLnF,GAAK,IACPiE,EAAMA,EAAI,QAAQ,IAAK,EAAE,EACzBlE,EAAI,IAAID,EAAK,CAAC,EACdC,EAAE,EAAIkE,EAAI,OAASjE,EACnBD,EAAE,EAAIkF,GAAYf,GAAenE,CAAC,EAAG,GAAI2C,CAAI,EAC7C3C,EAAE,EAAIA,EAAE,EAAE,QAGZK,EAAK6E,GAAYhB,EAAK,GAAIvB,CAAI,EAC9B9B,EAAIc,EAAMtB,EAAG,OAGNA,EAAG,EAAEsB,CAAG,GAAK,GAAItB,EAAG,IAAI,EAE/B,GAAI,CAACA,EAAG,CAAC,EACP6D,EAAMmD,EAAQ,OAAS,QAClB,CAyBL,GAxBIpH,EAAI,EACNY,KAEAnB,EAAI,IAAIK,EAAKL,CAAC,EACdA,EAAE,EAAIW,EACNX,EAAE,EAAImB,EACNnB,EAAI8B,GAAO9B,EAAGM,EAAGmB,EAAIT,EAAI,EAAGiC,CAAI,EAChCtC,EAAKX,EAAE,EACPmB,EAAInB,EAAE,EACNwH,EAAU5I,IAIZ2B,EAAII,EAAGc,CAAE,EACTrB,EAAI6C,EAAO,EACXuE,EAAUA,GAAW7G,EAAGc,EAAK,CAAC,IAAM,OAEpC+F,EAAUxG,EAAK,GACVT,IAAM,QAAUiH,KAAaxG,IAAO,GAAKA,KAAQhB,EAAE,EAAI,EAAI,EAAI,IAChEO,EAAIH,GAAKG,IAAMH,IAAMY,IAAO,GAAKwG,GAAWxG,IAAO,GAAKL,EAAGc,EAAK,CAAC,EAAI,GACrET,KAAQhB,EAAE,EAAI,EAAI,EAAI,IAE1BW,EAAG,OAASc,EAER+F,EAGF,KAAO,EAAE7G,EAAG,EAAEc,CAAE,EAAIwB,EAAO,GACzBtC,EAAGc,CAAE,EAAI,EACJA,IACH,EAAEN,EACFR,EAAG,QAAQ,CAAC,GAMlB,IAAKsB,EAAMtB,EAAG,OAAQ,CAACA,EAAGsB,EAAM,CAAC,EAAG,EAAEA,EAAI,CAG1C,IAAK1B,EAAI,EAAGiE,EAAM,GAAIjE,EAAI0B,EAAK1B,IAAKiE,GAAOhG,GAAS,OAAOmC,EAAGJ,CAAC,CAAC,EAGhE,GAAIoH,EAAO,CACT,GAAI1F,EAAM,EACR,GAAIyD,GAAW,IAAMA,GAAW,EAAG,CAEjC,IADAnF,EAAImF,GAAW,GAAK,EAAI,EACnB,EAAEzD,EAAKA,EAAM1B,EAAG0B,IAAOuC,GAAO,IAEnC,IADA7D,EAAK6E,GAAYhB,EAAKvB,EAAMyC,CAAO,EAC9BzD,EAAMtB,EAAG,OAAQ,CAACA,EAAGsB,EAAM,CAAC,EAAG,EAAEA,EAAI,CAG1C,IAAK1B,EAAI,EAAGiE,EAAM,KAAMjE,EAAI0B,EAAK1B,IAAKiE,GAAOhG,GAAS,OAAOmC,EAAGJ,CAAC,CAAC,CACpE,MACEiE,EAAMA,EAAI,OAAO,CAAC,EAAI,IAAMA,EAAI,MAAM,CAAC,EAI3CA,EAAOA,GAAOrD,EAAI,EAAI,IAAM,MAAQA,CACtC,SAAWA,EAAI,EAAG,CAChB,KAAO,EAAEA,GAAIqD,EAAM,IAAMA,EACzBA,EAAM,KAAOA,CACf,SACM,EAAErD,EAAIc,EAAK,IAAKd,GAAKc,EAAKd,KAAOqD,GAAO,SACnCrD,EAAIc,IAAKuC,EAAMA,EAAI,MAAM,EAAGrD,CAAC,EAAI,IAAMqD,EAAI,MAAMrD,CAAC,EAE/D,CAEAqD,GAAOkB,GAAW,GAAK,KAAOA,GAAW,EAAI,KAAOA,GAAW,EAAI,KAAO,IAAMlB,CAClF,CAEA,OAAOxE,EAAE,EAAI,EAAI,IAAMwE,EAAMA,CAC/B,CAIA,SAASsD,GAASnC,EAAK1D,EAAK,CAC1B,GAAI0D,EAAI,OAAS1D,EACf,OAAA0D,EAAI,OAAS1D,EACN,EAEX,CAyDA,SAASkH,GAAInJ,EAAG,CACd,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CACzB,CASA,SAASoJ,GAAKpJ,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAUA,SAASqJ,GAAMrJ,EAAG,CAChB,OAAO,IAAI,KAAKA,CAAC,EAAE,MAAM,CAC3B,CAWA,SAASsJ,GAAItJ,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,KAAKM,CAAC,CAC3B,CAUA,SAASiJ,GAAKvJ,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAUA,SAASwJ,GAAMxJ,EAAG,CAChB,OAAO,IAAI,KAAKA,CAAC,EAAE,MAAM,CAC3B,CAUA,SAASyJ,GAAKzJ,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAUA,SAAS0J,GAAM1J,EAAG,CAChB,OAAO,IAAI,KAAKA,CAAC,EAAE,MAAM,CAC3B,CA4BA,SAAS2J,GAAMrJ,EAAGN,EAAG,CACnBM,EAAI,IAAI,KAAKA,CAAC,EACdN,EAAI,IAAI,KAAKA,CAAC,EACd,IAAIsB,EACFP,EAAK,KAAK,UACVC,EAAK,KAAK,SACV4B,EAAM7B,EAAK,EAGb,MAAI,CAACT,EAAE,GAAK,CAACN,EAAE,EACbsB,EAAI,IAAI,KAAK,GAAG,EAGP,CAAChB,EAAE,GAAK,CAACN,EAAE,GACpBsB,EAAIqB,GAAM,KAAMC,EAAK,CAAC,EAAE,MAAM5C,EAAE,EAAI,EAAI,IAAO,GAAI,EACnDsB,EAAE,EAAIhB,EAAE,GAGC,CAACN,EAAE,GAAKM,EAAE,OAAO,GAC1BgB,EAAItB,EAAE,EAAI,EAAI2C,GAAM,KAAM5B,EAAIC,CAAE,EAAI,IAAI,KAAK,CAAC,EAC9CM,EAAE,EAAIhB,EAAE,GAGC,CAACA,EAAE,GAAKN,EAAE,OAAO,GAC1BsB,EAAIqB,GAAM,KAAMC,EAAK,CAAC,EAAE,MAAM,EAAG,EACjCtB,EAAE,EAAIhB,EAAE,GAGCN,EAAE,EAAI,GACf,KAAK,UAAY4C,EACjB,KAAK,SAAW,EAChBtB,EAAI,KAAK,KAAKQ,GAAOxB,EAAGN,EAAG4C,EAAK,CAAC,CAAC,EAClC5C,EAAI2C,GAAM,KAAMC,EAAK,CAAC,EACtB,KAAK,UAAY7B,EACjB,KAAK,SAAWC,EAChBM,EAAIhB,EAAE,EAAI,EAAIgB,EAAE,MAAMtB,CAAC,EAAIsB,EAAE,KAAKtB,CAAC,GAEnCsB,EAAI,KAAK,KAAKQ,GAAOxB,EAAGN,EAAG4C,EAAK,CAAC,CAAC,EAG7BtB,CACT,CAUA,SAASsI,GAAK5J,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CASA,SAAS6J,GAAK7J,EAAG,CACf,OAAOC,EAASD,EAAI,IAAI,KAAKA,CAAC,EAAGA,EAAE,EAAI,EAAG,CAAC,CAC7C,CAWA,SAAS8J,GAAM9J,EAAGE,EAAKC,EAAK,CAC1B,OAAO,IAAI,KAAKH,CAAC,EAAE,MAAME,EAAKC,CAAG,CACnC,CAqBA,SAAS4J,GAAOC,EAAK,CACnB,GAAI,CAACA,GAAO,OAAOA,GAAQ,SAAU,MAAM,MAAMjL,GAAe,iBAAiB,EACjF,IAAIwB,EAAGqI,EAAGqB,EACRC,EAAcF,EAAI,WAAa,GAC/BG,EAAK,CACH,YAAa,EAAG5L,GAChB,WAAY,EAAG,EACf,WAAY,CAACD,GAAW,EACxB,WAAY,EAAGA,GACf,OAAQ,EAAGA,GACX,OAAQ,CAACA,GAAW,EACpB,SAAU,EAAG,CACf,EAEF,IAAKiC,EAAI,EAAGA,EAAI4J,EAAG,OAAQ5J,GAAK,EAE9B,GADIqI,EAAIuB,EAAG5J,CAAC,EAAG2J,IAAa,KAAKtB,CAAC,EAAIjK,GAASiK,CAAC,IAC3CqB,EAAID,EAAIpB,CAAC,KAAO,OACnB,GAAIxJ,GAAU6K,CAAC,IAAMA,GAAKA,GAAKE,EAAG5J,EAAI,CAAC,GAAK0J,GAAKE,EAAG5J,EAAI,CAAC,EAAG,KAAKqI,CAAC,EAAIqB,MACjE,OAAM,MAAMjL,GAAkB4J,EAAI,KAAOqB,CAAC,EAKnD,GADIrB,EAAI,SAAUsB,IAAa,KAAKtB,CAAC,EAAIjK,GAASiK,CAAC,IAC9CqB,EAAID,EAAIpB,CAAC,KAAO,OACnB,GAAIqB,IAAM,IAAQA,IAAM,IAASA,IAAM,GAAKA,IAAM,EAChD,GAAIA,EACF,GAAI,OAAO,OAAU,KAAe,SACjC,OAAO,iBAAmB,OAAO,aAClC,KAAKrB,CAAC,EAAI,OAEV,OAAM,MAAM1J,EAAiB,OAG/B,KAAK0J,CAAC,EAAI,OAGZ,OAAM,MAAM5J,GAAkB4J,EAAI,KAAOqB,CAAC,EAI9C,OAAO,IACT,CAUA,SAASG,GAAIpK,EAAG,CACd,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CACzB,CAUA,SAASqK,GAAKrK,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAQA,SAASsK,GAAMN,EAAK,CAClB,IAAIzJ,EAAGqI,EAAGuB,EASV,SAAStB,EAAQoB,EAAG,CAClB,IAAI9I,EAAGZ,EAAGmB,EACR1B,EAAI,KAGN,GAAI,EAAEA,aAAa6I,GAAU,OAAO,IAAIA,EAAQoB,CAAC,EAMjD,GAFAjK,EAAE,YAAc6I,EAEZ0B,GAAkBN,CAAC,EAAG,CACxBjK,EAAE,EAAIiK,EAAE,EAEJnL,EACE,CAACmL,EAAE,GAAKA,EAAE,EAAIpB,EAAQ,MAGxB7I,EAAE,EAAI,IACNA,EAAE,EAAI,MACGiK,EAAE,EAAIpB,EAAQ,MAGvB7I,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,IAERA,EAAE,EAAIiK,EAAE,EACRjK,EAAE,EAAIiK,EAAE,EAAE,MAAM,IAGlBjK,EAAE,EAAIiK,EAAE,EACRjK,EAAE,EAAIiK,EAAE,EAAIA,EAAE,EAAE,MAAM,EAAIA,EAAE,GAG9B,MACF,CAIA,GAFAvI,EAAI,OAAOuI,EAEPvI,IAAM,SAAU,CAClB,GAAIuI,IAAM,EAAG,CACXjK,EAAE,EAAI,EAAIiK,EAAI,EAAI,GAAK,EACvBjK,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,EACR,MACF,CAUA,GARIiK,EAAI,GACNA,EAAI,CAACA,EACLjK,EAAE,EAAI,IAENA,EAAE,EAAI,EAIJiK,IAAM,CAAC,CAACA,GAAKA,EAAI,IAAK,CACxB,IAAK9I,EAAI,EAAGZ,EAAI0J,EAAG1J,GAAK,GAAIA,GAAK,GAAIY,IAEjCrC,EACEqC,EAAI0H,EAAQ,MACd7I,EAAE,EAAI,IACNA,EAAE,EAAI,MACGmB,EAAI0H,EAAQ,MACrB7I,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,IAERA,EAAE,EAAImB,EACNnB,EAAE,EAAI,CAACiK,CAAC,IAGVjK,EAAE,EAAImB,EACNnB,EAAE,EAAI,CAACiK,CAAC,GAGV,MACF,CAGA,GAAIA,EAAI,IAAM,EAAG,CACVA,IAAGjK,EAAE,EAAI,KACdA,EAAE,EAAI,IACNA,EAAE,EAAI,KACN,MACF,CAEA,OAAOwI,GAAaxI,EAAGiK,EAAE,SAAS,CAAC,CACrC,CAEA,GAAIvI,IAAM,SACR,OAAKnB,EAAI0J,EAAE,WAAW,CAAC,KAAO,IAC5BA,EAAIA,EAAE,MAAM,CAAC,EACbjK,EAAE,EAAI,KAEFO,IAAM,KAAI0J,EAAIA,EAAE,MAAM,CAAC,GAC3BjK,EAAE,EAAI,GAGDP,GAAU,KAAKwK,CAAC,EAAIzB,GAAaxI,EAAGiK,CAAC,EAAIxB,GAAWzI,EAAGiK,CAAC,EAGjE,GAAIvI,IAAM,SACR,OAAIuI,EAAI,GACNA,EAAI,CAACA,EACLjK,EAAE,EAAI,IAENA,EAAE,EAAI,EAGDwI,GAAaxI,EAAGiK,EAAE,SAAS,CAAC,EAGrC,MAAM,MAAMjL,GAAkBiL,CAAC,CACjC,CA2DA,GAzDApB,EAAQ,UAAY9I,EAEpB8I,EAAQ,SAAW,EACnBA,EAAQ,WAAa,EACrBA,EAAQ,WAAa,EACrBA,EAAQ,YAAc,EACtBA,EAAQ,cAAgB,EACxBA,EAAQ,gBAAkB,EAC1BA,EAAQ,gBAAkB,EAC1BA,EAAQ,gBAAkB,EAC1BA,EAAQ,iBAAmB,EAC3BA,EAAQ,OAAS,EAEjBA,EAAQ,OAASA,EAAQ,IAAMkB,GAC/BlB,EAAQ,MAAQyB,GAChBzB,EAAQ,UAAY0B,GAEpB1B,EAAQ,IAAMM,GACdN,EAAQ,KAAOO,GACfP,EAAQ,MAAQQ,GAChBR,EAAQ,IAAMS,GACdT,EAAQ,KAAOU,GACfV,EAAQ,MAAQW,GAChBX,EAAQ,KAAOY,GACfZ,EAAQ,MAAQa,GAChBb,EAAQ,MAAQc,GAChBd,EAAQ,KAAOe,GACff,EAAQ,KAAOgB,GACfhB,EAAQ,MAAQiB,GAChBjB,EAAQ,IAAMuB,GACdvB,EAAQ,KAAOwB,GACfxB,EAAQ,IAAM2B,GACd3B,EAAQ,IAAM4B,GACd5B,EAAQ,MAAQ6B,GAChB7B,EAAQ,MAAQ8B,GAChB9B,EAAQ,GAAK+B,GACb/B,EAAQ,IAAMgC,GACdhC,EAAQ,MAAQiC,GAChBjC,EAAQ,KAAOkC,GACflC,EAAQ,IAAM1I,GACd0I,EAAQ,IAAM3I,GACd2I,EAAQ,IAAMmC,GACdnC,EAAQ,IAAMoC,GACdpC,EAAQ,IAAMX,GACdW,EAAQ,OAASqC,GACjBrC,EAAQ,MAAQsC,GAChBtC,EAAQ,KAAOxB,GACfwB,EAAQ,IAAMuC,GACdvC,EAAQ,KAAOwC,GACfxC,EAAQ,KAAOyC,GACfzC,EAAQ,IAAM0C,GACd1C,EAAQ,IAAMV,GACdU,EAAQ,IAAM2C,GACd3C,EAAQ,KAAO4C,GACf5C,EAAQ,MAAQ6C,GAEZ1B,IAAQ,SAAQA,EAAM,CAAC,GACvBA,GACEA,EAAI,WAAa,GAEnB,IADAG,EAAK,CAAC,YAAa,WAAY,WAAY,WAAY,OAAQ,OAAQ,SAAU,QAAQ,EACpF5J,EAAI,EAAGA,EAAI4J,EAAG,QAAcH,EAAI,eAAepB,EAAIuB,EAAG5J,GAAG,CAAC,IAAGyJ,EAAIpB,CAAC,EAAI,KAAKA,CAAC,GAIrF,OAAAC,EAAQ,OAAOmB,CAAG,EAEXnB,CACT,CAWA,SAAS2B,GAAIxK,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAUA,SAASmK,GAAIzK,EAAG,CACd,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CACzB,CASA,SAAS0K,GAAM1K,EAAG,CAChB,OAAOC,EAASD,EAAI,IAAI,KAAKA,CAAC,EAAGA,EAAE,EAAI,EAAG,CAAC,CAC7C,CAYA,SAAS2K,IAAQ,CACf,IAAIpK,EAAGc,EACL,EAAI,IAAI,KAAK,CAAC,EAIhB,IAFAvC,EAAW,GAENyB,EAAI,EAAGA,EAAI,UAAU,QAExB,GADAc,EAAI,IAAI,KAAK,UAAUd,GAAG,CAAC,EACtBc,EAAE,EAMI,EAAE,IACX,EAAI,EAAE,KAAKA,EAAE,MAAMA,CAAC,CAAC,OAPb,CACR,GAAIA,EAAE,EACJ,OAAAvC,EAAW,GACJ,IAAI,KAAK,EAAI,CAAC,EAEvB,EAAIuC,CACN,CAKF,OAAAvC,EAAW,GAEJ,EAAE,KAAK,CAChB,CAQA,SAASyL,GAAkBP,EAAK,CAC9B,OAAOA,aAAenB,IAAWmB,GAAOA,EAAI,cAAgB7K,IAAO,EACrE,CAUA,SAASyL,GAAG5K,EAAG,CACb,OAAO,IAAI,KAAKA,CAAC,EAAE,GAAG,CACxB,CAaA,SAAS6K,GAAI7K,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAUA,SAASyK,GAAK/K,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CAAC,CAC1B,CAUA,SAAS8K,GAAM9K,EAAG,CAChB,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,EAAE,CAC3B,CASA,SAASG,IAAM,CACb,OAAO6H,GAAS,KAAM,UAAW,EAAE,CACrC,CASA,SAAS9H,IAAM,CACb,OAAO8H,GAAS,KAAM,UAAW,CAAC,CACpC,CAWA,SAASgD,GAAIhL,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAWA,SAAS2K,GAAIjL,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAWA,SAAS4H,GAAIlI,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAWA,SAAS4K,GAAOzJ,EAAI,CAClB,IAAIO,EAAGb,EAAGf,EAAGiB,EACXd,EAAI,EACJ,EAAI,IAAI,KAAK,CAAC,EACdgF,EAAK,CAAC,EAOR,GALI9D,IAAO,OAAQA,EAAK,KAAK,UACxB8C,GAAW9C,EAAI,EAAGlD,EAAU,EAEjC6B,EAAI,KAAK,KAAKqB,EAAK9B,CAAQ,EAEtB,KAAK,OAIH,GAAI,OAAO,gBAGhB,IAFAqC,EAAI,OAAO,gBAAgB,IAAI,YAAY5B,CAAC,CAAC,EAEtCG,EAAIH,GACTiB,EAAIW,EAAEzB,CAAC,EAIHc,GAAK,MACPW,EAAEzB,CAAC,EAAI,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAKnDgF,EAAGhF,GAAG,EAAIc,EAAI,YAKT,OAAO,YAAa,CAK7B,IAFAW,EAAI,OAAO,YAAY5B,GAAK,CAAC,EAEtBG,EAAIH,GAGTiB,EAAIW,EAAEzB,CAAC,GAAKyB,EAAEzB,EAAI,CAAC,GAAK,IAAMyB,EAAEzB,EAAI,CAAC,GAAK,MAAQyB,EAAEzB,EAAI,CAAC,EAAI,MAAS,IAGlEc,GAAK,MACP,OAAO,YAAY,CAAC,EAAE,KAAKW,EAAGzB,CAAC,GAK/BgF,EAAG,KAAKlE,EAAI,GAAG,EACfd,GAAK,GAITA,EAAIH,EAAI,CACV,KACE,OAAM,MAAMlB,EAAiB,MA9C7B,MAAOqB,EAAIH,GAAImF,EAAGhF,GAAG,EAAI,KAAK,OAAO,EAAI,IAAM,EA2DjD,IAVAH,EAAImF,EAAG,EAAEhF,CAAC,EACVkB,GAAM9B,EAGFS,GAAKqB,IACPJ,EAAIhC,GAAQ,GAAIM,EAAW8B,CAAE,EAC7B8D,EAAGhF,CAAC,GAAKH,EAAIiB,EAAI,GAAKA,GAIjBkE,EAAGhF,CAAC,IAAM,EAAGA,IAAKgF,EAAG,IAAI,EAGhC,GAAIhF,EAAI,EACNY,EAAI,EACJoE,EAAK,CAAC,CAAC,MACF,CAIL,IAHApE,EAAI,GAGGoE,EAAG,CAAC,IAAM,EAAGpE,GAAKxB,EAAU4F,EAAG,MAAM,EAG5C,IAAKnF,EAAI,EAAGiB,EAAIkE,EAAG,CAAC,EAAGlE,GAAK,GAAIA,GAAK,GAAIjB,IAGrCA,EAAIT,IAAUwB,GAAKxB,EAAWS,EACpC,CAEA,SAAE,EAAIe,EACN,EAAE,EAAIoE,EAEC,CACT,CAWA,SAAS4F,GAAMnL,EAAG,CAChB,OAAOC,EAASD,EAAI,IAAI,KAAKA,CAAC,EAAGA,EAAE,EAAI,EAAG,KAAK,QAAQ,CACzD,CAcA,SAASqH,GAAKrH,EAAG,CACf,OAAAA,EAAI,IAAI,KAAKA,CAAC,EACPA,EAAE,EAAKA,EAAE,EAAE,CAAC,EAAIA,EAAE,EAAI,EAAIA,EAAE,EAAKA,EAAE,GAAK,GACjD,CAUA,SAASoL,GAAIpL,EAAG,CACd,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CACzB,CAUA,SAASqL,GAAKrL,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAUA,SAASsL,GAAKtL,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAWA,SAASuL,GAAIvL,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAYA,SAAS6H,IAAM,CACb,IAAI5H,EAAI,EACN0H,EAAO,UACPjI,EAAI,IAAI,KAAKiI,EAAK1H,CAAC,CAAC,EAGtB,IADAzB,EAAW,GACJkB,EAAE,GAAK,EAAEO,EAAI0H,EAAK,QAASjI,EAAIA,EAAE,KAAKiI,EAAK1H,CAAC,CAAC,EACpD,OAAAzB,EAAW,GAEJmB,EAASD,EAAG,KAAK,UAAW,KAAK,QAAQ,CAClD,CAUA,SAASwL,GAAIxL,EAAG,CACd,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CACzB,CAUA,SAASyL,GAAKzL,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CASA,SAAS0L,GAAM1L,EAAG,CAChB,OAAOC,EAASD,EAAI,IAAI,KAAKA,CAAC,EAAGA,EAAE,EAAI,EAAG,CAAC,CAC7C,CAGAD,EAAE,OAAO,IAAI,4BAA4B,CAAC,EAAIA,EAAE,SAChDA,EAAE,OAAO,WAAW,EAAI,UAGjB,IAAI8I,GAAU9I,EAAE,YAAcuK,GAAM3L,EAAQ,EAGnDF,GAAO,IAAIoK,GAAQpK,EAAI,EACvBC,GAAK,IAAImK,GAAQnK,EAAE,EAEnB,IAAOiN,GAAQ9C,GC/yJR,SAAS+C,GAAUC,EAAM,CAC9B,IAAIC,EAAc,KAClB,GAAI,SAAS,QAAU,SAAS,SAAW,GAAI,CAC7C,IAAMC,EAAU,SAAS,OAAO,MAAM,GAAG,EACzC,QAAS,EAAI,EAAG,EAAIA,EAAQ,OAAQ,IAAK,CACvC,IAAMC,EAASD,EAAQ,CAAC,EAAE,KAAK,EAE/B,GAAIC,EAAO,UAAU,EAAGH,EAAK,OAAS,CAAC,IAAMA,EAAO,IAAK,CACvDC,EAAc,mBAAmBE,EAAO,UAAUH,EAAK,OAAS,CAAC,CAAC,EAClE,KACF,CACF,CACF,CACA,OAAOC,CACT,CAEO,SAASG,GAAcC,EAAQC,EAAe,CACnD,IAAMC,EAAe,IAAIC,GAAQH,CAAM,EACjCI,EAAS,IAAID,GAAQ,EAAE,EAAE,IAAIF,CAAa,EAIhD,OAH0BC,EACvB,MAAME,CAAM,EACZ,gBAAgB,EAAGD,GAAQ,aAAa,EAClB,SAAS,CACpC,CAEO,SAASE,GAAWC,EAASC,EAAe,GAAO,CACxD,GAAI,MAAMD,CAAO,GAAKA,EAAU,EAC9B,MAAO,gBAGT,IAAME,EAAQ,KAAK,MAAMF,EAAU,IAAI,EACjCG,EAAmBH,EAAU,KAC7BI,EAAU,KAAK,MAAMD,EAAmB,EAAE,EAEhD,GAAIF,EAAc,CAChB,IAAMI,EAAaH,EAAQ,EAAI,GAAGA,CAAK,IAAM,GACvCI,EAAeF,EAAU,EAAI,GAAGA,CAAO,MAAQ,GAErD,OAAIC,GAAcC,EACT,GAAGD,CAAU,IAAIC,CAAY,GAC3BD,GAEAC,GAGF,MAEX,KAAO,CACL,IAAMD,EAAaH,EAAQ,EAAI,GAAGA,CAAK,QAAQA,EAAQ,EAAI,IAAM,EAAE,GAAK,GAClEI,EACJF,EAAU,EAAI,GAAGA,CAAO,UAAUA,EAAU,EAAI,IAAM,EAAE,GAAK,GAE/D,OAAIC,GAAcC,EACT,GAAGD,CAAU,KAAKC,CAAY,GAC5BD,GAEAC,GAGF,WAEX,CACF,CC7DA,IAAMC,GAAoB,CACxB,YAAa,GACb,SAAU,EACV,KAAM,SACN,MAAO,GACP,MAAO,IACP,UAAW,KACX,gBAAiB,GACjB,YAAa,CAAC,EACd,aAAc,EAChB,EAEA,SAASC,GAAcC,EAAQC,EAAUC,EAAO,CAC9C,IAAMC,EAAUC,GAAcJ,EAAQE,CAAK,EAC3C,OAAO,OAAO,OAAO,CACnB,OAAQC,EACR,SAAAF,CACF,CAAC,CACH,CAEA,SAASI,GAAmBL,EAAQC,EAAUC,EAAO,CACnD,GAAI,CAEF,OADcH,GAAcC,EAAQC,EAAUC,CAAK,EACtC,SAAS,SAAS,CACjC,MAAY,CACV,MAAO,MACT,CACF,CAEe,SAARI,IAAgC,CACrC,MAAO,CACL,SAAU,MACV,IAAK,EACL,UAAW,CAAC,CAAE,GAAGR,EAAkB,CAAC,EACpC,YAAa,GACb,eAAgB,GAChB,eAAgB,EAChB,QAAS,GACT,eAAgB,KAChB,eAAgB,KAChB,SAAU,KACV,eAAgB,KAChB,eAAgB,KAChB,MAAO,CACL,GAAM,CAAE,UAAAS,EAAW,eAAAC,EAAgB,eAAAC,CAAe,EAAI,KAAK,IAAI,QAE3DF,GAAW,OAAS,GAAKA,IAAc,SACzC,KAAK,UAAY,KAAK,MAAMA,CAAS,GAGnCC,EAAe,OAAS,IAC1B,KAAK,eAAiB,KAAK,MAAM,KAAK,MAAMA,CAAc,EAAE,CAAC,EAAE,OAAO,GAGxE,KAAK,eAAiB,KAAK,MAAMC,CAAc,EAE/C,KAAK,eAAiB,KAAK,MAAM,KAAK,IAAI,QAAQ,cAAc,CAClE,EACA,oBAAqB,CACnB,KAAK,IAAM,KAAK,eAAe,KAAK,OAAO,OAAO,KAAK,EACvD,KAAK,SAAW,KAAK,OAAO,OAAO,KACrC,EACA,gBAAiB,CACf,KAAK,UAAU,OAAO,KAAK,MAAM,MAAO,CAAC,CAC3C,EACA,eAAgB,CACd,IAAMC,EAAO,KAAK,UAAU,KAAK,MAAM,KAAK,EACtCC,EAAO,IAAIC,GAAQF,EAAK,IAAI,EAC5BG,EAAM,IAAID,GAAQF,EAAK,QAAQ,EACrC,OAAOC,EAAK,IAAIE,CAAG,EAAE,gBAAgB,KAAK,eAAe,KAAK,QAAQ,CAAC,CACzE,EACA,wBAAyB,CACvB,OAAOR,GACL,KAAK,cAAc,EACnB,KAAK,SACL,KAAK,eAAe,KAAK,QAAQ,CACnC,CACF,EACA,mBAAoB,CAMlB,OALe,KAAK,UAAU,IAAKK,GAAS,CAC1C,IAAMC,EAAO,IAAIC,GAAQF,EAAK,IAAI,EAC5BG,EAAM,IAAID,GAAQF,EAAK,QAAQ,EACrC,OAAOC,EAAK,IAAIE,CAAG,CACrB,CAAC,EACa,OAAO,CAACC,EAAMC,IACnBD,EAAK,IAAIC,CAAI,EACnB,IAAIH,GAAQ,CAAC,CAAC,CACnB,EACA,mBAAoB,CAClB,OAAOP,GACL,KAAK,kBAAkB,EACvB,KAAK,SACL,KAAK,eAAe,KAAK,QAAQ,CACnC,CACF,EACA,eAAgB,CACd,IAAMW,EAAW,KAAK,kBAAkB,EACxC,GAAI,KAAK,IAAM,EAAG,CAChB,IAAMC,EAAaD,EAAS,IAAI,KAAK,IAAM,GAAG,EAC9C,OAAOA,EAAS,MAAMC,CAAU,CAClC,CACA,OAAOD,CACT,EACA,wBAAyB,CACvB,OAAOX,GACL,KAAK,cAAc,EACnB,KAAK,SACL,KAAK,eAAe,KAAK,QAAQ,CACnC,CACF,EACA,oBAAqB,CACnB,IAAMa,EAAgB,KAAK,cAAc,EACzC,GAAI,KAAK,aACP,GAAI,KAAK,iBAAmB,IAAK,CAC/B,IAAMD,EAAaC,EAAc,IAAI,KAAK,eAAiB,GAAG,EAC9D,OAAOA,EAAc,MAAMD,CAAU,CACvC,SAAW,KAAK,iBAAmB,IACjC,OAAOC,EAAc,MAAM,KAAK,cAAc,EAGlD,OAAOA,CACT,EACA,6BAA8B,CAC5B,OAAOb,GACL,KAAK,mBAAmB,EACxB,KAAK,SACL,KAAK,eAAe,KAAK,QAAQ,CACnC,CACF,EACA,YAAYc,EAAK,CACf,IAAIC,EACAD,GAAK,QAAUA,EAAI,QAAQ,SAC7BC,EAAUD,EAAI,QAEdC,EAAU,CAAE,GAAGtB,EAAkB,EAC7B,KAAK,UAAU,CAAC,IAClBsB,EAAQ,KAAO,KAAK,UAAU,CAAC,EAAE,KACjCA,EAAQ,MAAQ,KAAK,UAAU,CAAC,EAAE,QAGlC,KAAK,aACP,KAAK,UAAU,KAAKA,CAAO,GAE3B,KAAK,UAAY,CAACA,CAAO,EACzB,KAAK,aAAe,GAExB,EACA,aAAaD,EAAK,CAChB,GAAIA,GAAK,QACP,QAAWE,KAAYF,EAAI,OACzB,GAAI,CAAC,OAAO,MAAME,EAAS,SAAS,EAAG,CACrC,IAAMC,EAAe,KAAK,UAAU,KACjCZ,GAASA,EAAK,YAAcW,EAAS,SACxC,EACIC,GACFA,EAAa,YAAc,CACzB,GAAGA,EAAa,YAChB,GAAGD,EAAS,WACd,EACAC,EAAa,MAAQ,IAAIV,GAAQU,EAAa,KAAK,EAChD,KAAKD,EAAS,KAAK,EACnB,gBAAgB,KAAK,eAAe,KAAK,QAAQ,CAAC,EAClD,SAAS,EACZC,EAAa,SAAW,IAAIV,GAAQU,EAAa,QAAQ,EACtD,KAAKD,EAAS,QAAQ,EACtB,gBAAgB,CAAC,GAEhB,KAAK,aACP,KAAK,UAAU,KAAKA,CAAQ,GAE5B,KAAK,UAAY,CAACA,CAAQ,EAC1B,KAAK,aAAe,GAG1B,EAGN,EACA,gBAAgBF,EAAK,CACnB,GAAM,CAAE,aAAAI,EAAc,YAAAC,CAAY,EAAIL,EAAI,OAAO,QAC3CE,EAAW,KAAK,UAAU,OAAOG,CAAW,CAAC,EAC7CC,EAAQJ,EAAS,YAAY,OAAOE,CAAY,CAAC,EACvDF,EAAS,SAAW,IAAIT,GAAQS,EAAS,QAAQ,EAC9C,MAAM,IAAIT,GAAQa,EAAM,QAAQ,CAAC,EACjC,gBAAgB,CAAC,EACjB,SAAS,EACZJ,EAAS,MAAQ,IAAIT,GAAQS,EAAS,KAAK,EACxC,MAAM,IAAIT,GAAQa,EAAM,MAAM,CAAC,EAC/B,gBAAgB,CAAC,EACjB,SAAS,EACZJ,EAAS,YAAY,OAAO,OAAOE,CAAY,EAAG,CAAC,CACrD,CACF,CACF,CCpMe,SAARG,IAAgD,CACrD,MAAO,CACL,cAAe,CAAC,EAChB,UAAW,CACT,OAAO,KAAK,cAAc,QAAQ,KAAK,IAAI,QAAQ,MAAM,IAAM,EACjE,EACA,kBAAmB,CACjB,IAAMC,EAAW,KAAK,MAAM,KAAK,OAAO,OAAO,QAAQ,QAAQ,EAC/D,KAAK,cAAc,KAAK,KAAK,OAAO,OAAO,QAAQ,MAAM,EACzD,KAAK,UAAU,eAAgBA,CAAQ,CACzC,CACF,CACF,CCZe,SAARC,IAAgC,CACrC,MAAO,CACL,kBAAmB,IAAI,IACvB,UAAW,CACT,KAAK,kBAAkB,MAAM,CAC/B,EACA,gBAAiB,CACf,OAAO,KAAK,kBAAkB,KAAO,CACvC,EACA,kBAAmB,CACjB,OAAO,KAAK,kBAAkB,KAAO,CACvC,CACF,CACF,CCXe,SAARC,IAA8C,CACnD,MAAO,CACL,iBAAkB,CAAC,EACnB,gBAAiB,CAAC,EAClB,YAAa,CAAC,EACd,eAAgB,KAChB,SAAU,MACV,MAAO,CACL,KAAK,eAAiB,KAAK,MAAM,KAAK,IAAI,QAAQ,cAAc,EAChE,KAAK,SAAW,KAAK,IAAI,QAAQ,QACnC,EACA,iBAAkB,CACZ,KAAK,gBAAgB,OAAS,EAChC,KAAK,gBAAkB,CAAC,EAExB,KAAK,gBAAkB,CAAC,GAAG,KAAK,gBAAgB,CAEpD,EACA,aAAc,CACZ,IAAMC,EAAY,CAAC,EAEnB,QAAWC,KAAW,KAAK,gBAAiB,CAC1C,IAAMC,EAAY,KAAK,YAAYD,CAAO,EACpCE,EAAeH,EAAU,KAC5BI,GAASA,EAAK,YAAcF,EAAU,SACzC,EACMG,EAAgB,CACpB,MAAOH,EAAU,MACjB,SAAUA,EAAU,SACpB,KAAMA,EAAU,KAChB,QAAAD,EACA,OAAQC,EAAU,OAClB,cAAeA,EAAU,cACzB,SACEA,EAAU,eAAiB,IAAMA,EAAU,QAAU,KAAO,CAChE,EACIC,EACFA,EAAa,YAAY,KAAKE,CAAa,EAE3CL,EAAU,KAAK,CACb,YAAaE,EAAU,YACvB,KAAM,IAAII,GAAQJ,EAAU,WAAW,EAAE,gBACvC,KAAK,eAAe,KAAK,QAAQ,CACnC,EACA,MAAOA,EAAU,aACjB,UAAWA,EAAU,UACrB,gBAAiB,GACjB,YAAa,CAACG,CAAa,EAC3B,SAAU,EACV,MAAOH,EAAU,WACnB,CAAC,CAEL,CAEA,QAAWK,KAAYP,EACrB,GAAIO,EAAS,QAAU,IAAK,CAC1B,IAAMC,EAASD,EAAS,YAAY,OAClC,CAACE,EAAKC,KACG,CACL,SAAUA,EAAI,SAAWD,EAAI,SAC7B,MAAO,IAAIH,GAAQI,EAAI,MAAM,EAAE,KAAKD,EAAI,KAAK,CAC/C,GAEF,CACE,SAAU,EACV,MAAO,IAAIH,GAAQ,CAAC,CACtB,CACF,EACAC,EAAS,SAAWC,EAAO,SAC3BD,EAAS,MAAQC,EAAO,MAAM,SAAS,CACzC,CAEF,KAAK,UAAU,iBAAkBR,CAAS,EAC1C,KAAK,UAAU,aAAa,CAC9B,CACF,CACF,CC5Ee,SAARW,IAA0C,CAC/C,MAAO,CACL,WAAY,CAAC,EACb,gBAAiB,CAAC,EAClB,gBAAgBC,EAAS,CACnBA,EACF,KAAK,gBAAkB,KAAK,WAAW,IAAK,GAAM,EAAE,EAAE,EAEtD,KAAK,gBAAkB,CAAC,CAE5B,EACA,uBAAwB,CACtB,IAAMC,EAAkB,KAAK,WAAW,OAAQ,GAC9C,KAAK,gBAAgB,SAAS,EAAE,EAAE,CACpC,EACA,KAAK,UAAU,iBAAkBA,CAAe,CAClD,EACA,IAAI,kBAAmB,CACrB,IAAIC,EAAe,EACnB,YAAK,gBAAgB,QAASC,GAAO,CACnC,IAAMC,EAAQ,KAAK,WAAW,KAAMC,GAAMA,EAAE,IAAMF,CAAE,EAChDC,IAAOF,GAAgBE,EAAM,QACnC,CAAC,EACM,CAAE,WAAYE,GAAWJ,EAAc,EAAI,CAAE,CACtD,EACA,iBAAkB,CAChB,GAAM,CACJ,GAAIK,EACJ,UAAAC,EACA,UAAAC,EACA,YAAAC,EACA,MAAAC,EACA,QAAAC,CACF,EAAI,KAAK,IAAI,QACT,KAAK,WAAW,KAAMP,GAAMA,EAAE,KAAOE,CAAO,GAGhD,KAAK,WAAW,KAAK,CACnB,GAAI,OAAOA,CAAO,EAClB,UAAAC,EACA,UAAAC,EACA,YAAAC,EACA,MAAAC,EACA,QAAS,OAAOC,CAAO,CACzB,CAAC,CACH,CACF,CACF,CC9Ce,SAARC,IAA+B,CACpC,MAAO,CACL,YAAa,CAWb,EAEA,UAAW,CAgCX,EACA,OAAQ,KACR,aAAc,MACd,SAAU,CAAE,KAAM,MAAO,OAAQ,GAAI,EACrC,QAAS,EACT,SAAU,EACV,eAAgB,KAChB,eAAgB,EAChB,SAAU,EACV,UAAW,EACX,MAAO,EACP,OAAQ,EACR,WAAY,CAAC,EACb,mBAAoB,GACpB,iBAAkB,GAClB,cAAe,CAAC,EAChB,cAAe,CAAC,EAChB,aAAc,CAAC,EACf,gBAAiB,GACjB,uBAAwB,GACxB,2BAA4B,KAC5B,sBAAuB,CAAC,EACxB,qBAAsB,CAAC,EACvB,eAAgB,CAAC,EACjB,eAAgB,CAAC,EACjB,SAAU,CAAC,EAEX,MAAO,CACL,KAAK,eAAiB,KAAK,MAAM,KAAK,IAAI,QAAQ,gBAAkB,IAAI,EACxE,KAAK,eAAiB,KAAK,MAAM,KAAK,IAAI,QAAQ,gBAAkB,IAAI,EAExE,IAAMC,EAAe,KAAK,IAAI,cAAc,uBAAuB,EAC/DA,GAAgBA,EAAa,QAC/B,KAAK,OAASA,EAAa,OAG7B,IAAMC,EAAiB,KAAK,IAAI,cAAc,yBAAyB,EACnEA,GAAkBA,EAAe,QACnC,KAAK,aAAeA,EAAe,OAGZ,KAAK,MAC5B,KAAK,IAAI,QAAQ,kBAAoB,IACvC,EACiB,QAASC,GAAS,CACjC,GAAM,CAAE,OAAAC,EAAQ,GAAGC,CAAK,EAAIF,EAC5B,KAAK,mBAAmBE,EAAMD,GAAU,IAAI,CAC9C,CAAC,EAED,KAAK,gBAAgB,EAErB,SAAS,iBAAiB,iBAAmBE,GAAQ,CACnD,KAAK,cAAcA,EAAI,MAAM,CAC/B,CAAC,CACH,EACA,mBAAmBD,EAAMD,EAAQ,CAC/B,GAAM,CACJ,YAAAG,EACA,SAAAC,EACA,KAAAC,EACA,MAAAC,EACA,UAAWC,EACX,QAASC,CACX,EAAIP,EACEQ,EAAW,CACf,YAAaN,GAAe,GAC5B,SAAU,OAAOC,CAAQ,GAAK,EAC9B,KAAM,IAAIM,GAAQL,GAAQ,QAAQ,EAClC,WAAYE,IAAa,EACzB,WAAY,OAAOC,CAAS,GAAK,KACjC,UAAWD,IAAa,EAAI,UAAY,QACxC,MAAOD,IAAU,EAAI,IAAM,GAC3B,QAAS,CAAC,CACZ,EACIN,IACFS,EAAS,OACP,OAAOT,GAAW,SAAW,KAAK,MAAMA,CAAM,EAAIA,GAG1B,SAAS,iBACnC,6BAA6BS,EAAS,UAAU,IAClD,EAEoB,QAASE,GAAO,CAClC,GAAM,CAAE,GAAAC,EAAI,UAAAC,EAAW,UAAAL,EAAW,YAAAM,EAAa,MAAAC,EAAO,QAAAC,CAAQ,EAC5DL,EAAG,QACCM,EAAQ,CACZ,GAAIL,EAAK,OAAOA,CAAE,EAAI,KAAK,YAAY,OACvC,UAAWC,EACX,UAAW,OAAOL,CAAS,GAAK,KAChC,YAAaM,GAAe,GAC5B,MAAOC,GAAS,GAChB,QAAS,OAAOC,CAAO,GAAK,CAC9B,EACA,KAAK,YAAY,KAAKC,CAAK,EAC3BR,EAAS,QAAQ,KAAKQ,CAAK,CAC7B,CAAC,EAED,KAAK,UAAU,KAAKR,CAAQ,EAC5B,KAAK,gBAAgB,CACvB,EACA,oBAAqB,CACnB,IAAMS,EAAS,OAAO,KAAK,OAAO,OAAO,KAAK,EACxCC,EAAU,KAAK,eAAeD,CAAM,GAAK,EAC/C,KAAK,QAAUC,EACf,KAAK,OAAS,KAAK,OAAO,OAAO,MACjC,IAAMC,EAAa,KAAK,SACrB,OAAQC,GAAMA,EAAE,WAAaH,CAAM,EACnC,IAAKG,GAAMA,EAAE,EAAE,EAClB,KAAK,UAAY,KAAK,UAAU,OAC7BtB,GAAS,CAACA,EAAK,YAAcqB,EAAW,SAASrB,EAAK,UAAU,CACnE,EACA,KAAK,YAAc,KAAK,YAAY,OACjCkB,GAAU,CAACG,EAAW,SAASH,EAAM,SAAS,CACjD,EACA,KAAK,gBAAgB,CACvB,EACA,aAAc,CACZ,KAAK,UAAU,KAAK,CAClB,YAAa,GACb,SAAU,EACV,KAAM,EACN,WAAY,GACZ,QAAS,CAAC,CACZ,CAAC,EACD,KAAK,gBAAgB,CACvB,EACA,eAAeK,EAAO,CAEpB,IAAMC,GADU,KAAK,UAAUD,CAAK,EAAE,SAAW,CAAC,GACzB,IAAKE,GAAMA,EAAE,EAAE,EACxC,KAAK,YAAc,KAAK,YAAY,OACjCA,GAAM,CAACD,EAAS,SAASC,EAAE,EAAE,CAChC,EACA,KAAK,UAAU,OAAOF,EAAO,CAAC,EAC9B,KAAK,gBAAgB,CACvB,EACA,iBAAkB,CAChB,IAAIG,EAAM,EACV,KAAK,UAAU,QAAS1B,GAAS,CAC/B0B,IAAQ1B,EAAK,UAAY,IAAMA,EAAK,MAAQ,EAC9C,CAAC,EACD,KAAK,SAAW0B,EAChB,IAAIC,EAAiB,EACjB,KAAK,iBAAmB,IAC1BA,EAAkB,KAAK,SAAW,IAAOD,EAChC,KAAK,iBAAmB,MACjCC,EAAiB,KAAK,UAExB,KAAK,eAAiBA,EACtB,IAAMC,EAAmB,KAAK,SAAWD,EACnCE,GAAO,KAAK,SAAW,GAAK,IAClC,KAAK,UAAYD,EAAmBC,EACpC,KAAK,MAAQD,EAAmB,KAAK,SACvC,EACA,WAAWE,EAAQ,CACjB,GAAI,CAACA,EAAQ,CACX,KAAK,mBAAqB,GAC1B,MACF,CACA,IAAMC,EAAW,KAAK,WAAW,KAAMC,GAAMA,EAAE,IAAMF,CAAM,EACvDC,IACF,KAAK,mBAAqBA,EAAS,QAEvC,EACA,YAAYE,EAAO,CACL,MAAM,KAAKA,EAAM,OAAO,KAAK,EACnC,QAASC,GAAS,CAEnB,KAAK,cAAc,KACjBC,GAAMA,EAAE,OAASD,EAAK,MAAQC,EAAE,OAASD,EAAK,IACjD,GAEA,KAAK,cAAc,KAAKA,CAAI,CAEhC,CAAC,EACDD,EAAM,OAAO,MAAQ,IACvB,EACA,WAAWV,EAAO,CAChB,KAAK,cAAc,OAAOA,EAAO,CAAC,CACpC,EACA,eAAea,EAAQ,CACjB,OAAOA,GAAW,WACpBA,EAAS,GAEX,IAAMC,EAAcC,GAClBF,EACA,KAAK,eAAe,KAAK,YAAY,CACvC,EAMA,OAJiB,OAAO,CACtB,OAAQC,EACR,SAAU,KAAK,YACjB,CAAC,EACe,SAAS,CAC3B,EACA,eAAeE,EAAO,CACpB,GAAIA,IAAU,EAAG,MAAO,UACxB,IAAMC,EAAI,KACJC,EAAQ,CAAC,QAAS,KAAM,KAAM,IAAI,EAClC,EAAI,KAAK,MAAM,KAAK,IAAIF,CAAK,EAAI,KAAK,IAAIC,CAAC,CAAC,EAClD,OAAO,YAAYD,EAAQ,KAAK,IAAIC,EAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAI,IAAMC,EAAM,CAAC,CACxE,EAGA,uBAAuBlB,EAAO,CAC5B,KAAK,2BAA6BA,EAClC,KAAK,sBAAwB,KAAK,UAAUA,CAAK,EAEjD,KAAK,qBAAuB,KAAK,MAC/B,KAAK,UAAU,KAAK,sBAAsB,OAAO,CACnD,EACA,KAAK,uBAAyB,EAChC,EACA,sBAAsBmB,EAAY,CAChC,KAAK,qBAAqB,OAAOA,EAAY,CAAC,CAChD,EACA,IAAI,cAAe,CACjB,IAAIC,EAAe,KAAK,qBAAqB,OAC3C,CAACC,EAAK1B,IAAU0B,EAAM1B,EAAM,QAC5B,CACF,EACA,OAAO2B,GAAWF,EAAc,EAAI,CACtC,EACA,uBAAwB,CAEtB,KAAK,UAAU,KAAK,0BAA0B,EAAE,QAC9C,KAAK,qBAEP,KAAK,YAAc,KAAK,YAAY,OAAQ,GAC1C,KAAK,qBAAqB,KAAMzB,GAAUA,EAAM,KAAO,EAAE,EAAE,CAC7D,EACA,IAAIyB,EAAe,KAAK,qBAAqB,OAC3C,CAACC,EAAK1B,IAAU0B,EAAM1B,EAAM,QAC5B,CACF,EACA,KAAK,UAAU,KAAK,0BAA0B,EAAE,SAAW,YACxDyB,EAAe,MAAM,QAAQ,CAAC,CACjC,EACA,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,CAC3B,EACA,qBAAsB,CACpB,KAAK,uBAAyB,GAC9B,KAAK,2BAA6B,KAClC,KAAK,sBAAwB,CAAC,EAC9B,KAAK,qBAAuB,CAAC,CAC/B,EACA,cAAcG,EAAS,CACrB,GAAI,CAAC,MAAM,QAAQA,CAAO,GAAKA,EAAQ,SAAW,EAAG,CAEnD,KAAK,KAAK,CACR,MAAO,sBACP,KAAM,8CACN,KAAM,SACR,CAAC,EACD,MACF,CACA,IAAMC,EAAmBD,EAAQ,OAAO,CAACE,EAAK9B,IAAU,CACtD,IAAMT,EAAY,OAAOS,EAAM,SAAS,EACxC,OAAK8B,EAAI9B,EAAM,SAAS,IACtB8B,EAAI9B,EAAM,SAAS,EAAI,CACrB,UAAWT,EACX,YAAaS,EAAM,YACnB,QAAS,CAAC,CACZ,GAEF8B,EAAIvC,CAAS,EAAE,QAAQ,KAAKS,CAAK,EAC1B8B,CACT,EAAG,CAAC,CAAC,EACL,OAAW,CAACvC,EAAWwC,CAAW,IAAK,OAAO,QAAQF,CAAgB,EAAG,CACvE,IAAMG,EAAe,KAAK,UAAU,KAAMlD,GAEtC,OAAOA,EAAK,UAAU,IAAM,OAAOS,CAAS,GAAKT,EAAK,UAEzD,EACD,GAAIkD,EAEFA,EAAa,QAAQ,KAAK,GAAGD,EAAY,OAAO,EAChDC,EAAa,SAAW,YAEpBA,EAAa,QAAQ,OAAO,CAACN,EAAKnB,IAAMmB,EAAMnB,EAAE,QAAS,CAAC,EAAI,MAC9D,QAAQ,CAAC,CACb,EACA,QAAQ,IAAIyB,EAAa,QAAQ,MAC5B,CACL,IAAMC,EAAc,KAAK,SAAS,KAC/B7B,GAAMA,EAAE,KAAO,SAASb,CAAS,CACpC,EAEA,KAAK,UAAU,KAAK,CAClB,GAAI,KAAK,SACT,YAAa0C,EAAY,KACzB,SAAU,OACRF,EAAY,QAAQ,OAAO,CAACL,EAAKnB,IAAMmB,EAAMnB,EAAE,QAAS,CAAC,EAAI,IAC/D,EAAE,QAAQ,CAAC,EACX,KAAM,IAAId,GAAQwC,EAAY,MAAQ,CAAC,EACvC,WAAY,GACZ,WAAY1C,EACZ,UAAW,UACX,MAAO,IACP,QAASwC,EAAY,OACvB,CAAC,CACH,CACA,KAAK,YAAc,CAAC,GAAG,KAAK,YAAa,GAAGA,EAAY,OAAO,CACjE,CACA,KAAK,gBAAgB,EAErB,KAAK,KAAK,CACR,MAAO,mBACP,KAAM,GAAGH,EAAQ,MAAM,4CACvB,KAAM,SACR,CAAC,EAED,KAAK,uBAAyB,GAC9B,KAAK,2BAA6B,KAClC,KAAK,sBAAwB,CAAC,EAC9B,KAAK,qBAAuB,CAAC,EAI7B,KAAK,UAAU,aAAa,CAC9B,EACA,cAAc7B,EAASmC,EAAe,GAAO,CAC3C,OAAOP,GAAW5B,EAASmC,CAAY,CACzC,EACA,0BAA0B7B,EAAO,CAC/B,IAAM8B,EAAK,IAAI,aACX,KAAK,cAAc9B,CAAK,GAC1B8B,EAAG,MAAM,IAAI,KAAK,cAAc9B,CAAK,CAAC,EAExC,KAAK,IAAI,MAAQ8B,EAAG,KACtB,EACA,qBAAqBC,EAAU,CAC7B,IAAMC,EAAiB,SAAS,cAC9B,qCACF,EACIA,IACFA,EAAe,MAAQD,EAE3B,EACA,8BAA8BA,EAAU,CACtC,IAAMC,EAAiB,SAAS,cAC9B,sCACF,EACIA,IACFA,EAAe,MAAQD,EAE3B,CACF,CACF,CC/Ye,SAARE,IAAyB,CAC9B,MAAO,CACL,MAAO,CACL,KAAK,KAAK,CACZ,EACA,MAAO,CACL,KAAK,IAAI,MACP,mEACJ,EACA,OAAQ,CACN,KAAK,IAAI,OAAO,CAClB,CACF,CACF,CCbA,SAASC,GAAmB,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAG,CAC/C,GAAI,CACF,IAAIC,EAAI,EAAEF,CAAC,EAAEC,CAAC,EACZE,EAAID,EAAE,KACV,OAASE,EAAG,CACV,OAAO,KAAKP,EAAEO,CAAC,CACjB,CACAF,EAAE,KAAON,EAAEO,CAAC,EAAI,QAAQ,QAAQA,CAAC,EAAE,KAAKL,EAAGC,CAAC,CAC9C,CACA,SAASM,GAAkB,EAAG,CAC5B,OAAO,UAAY,CACjB,IAAIT,EAAI,KACNC,EAAI,UACN,OAAO,IAAI,QAAQ,SAAUC,EAAGC,EAAG,CACjC,IAAIC,EAAI,EAAE,MAAMJ,EAAGC,CAAC,EACpB,SAASS,EAAMF,EAAG,CAChBT,GAAmBK,EAAGF,EAAGC,EAAGO,EAAOC,EAAQ,OAAQH,CAAC,CACtD,CACA,SAASG,EAAOH,EAAG,CACjBT,GAAmBK,EAAGF,EAAGC,EAAGO,EAAOC,EAAQ,QAASH,CAAC,CACvD,CACAE,EAAM,MAAM,CACd,CAAC,CACH,CACF,CACA,SAASE,GAAgBX,EAAGC,EAAG,EAAG,CAChC,OAAQA,EAAIW,GAAeX,CAAC,KAAMD,EAAI,OAAO,eAAeA,EAAGC,EAAG,CAChE,MAAO,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EACZ,CAAC,EAAID,EAAEC,CAAC,EAAI,EAAGD,CACjB,CACA,SAASa,GAAQb,EAAGC,EAAG,CACrB,IAAI,EAAI,OAAO,KAAKD,CAAC,EACrB,GAAI,OAAO,sBAAuB,CAChC,IAAIE,EAAI,OAAO,sBAAsBF,CAAC,EACtCC,IAAMC,EAAIA,EAAE,OAAO,SAAUD,EAAG,CAC9B,OAAO,OAAO,yBAAyBD,EAAGC,CAAC,EAAE,UAC/C,CAAC,GAAI,EAAE,KAAK,MAAM,EAAGC,CAAC,CACxB,CACA,OAAO,CACT,CACA,SAASY,GAAed,EAAG,CACzB,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAI,EAAY,UAAUA,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAC,EAC/CA,EAAI,EAAIY,GAAQ,OAAO,CAAC,EAAG,EAAE,EAAE,QAAQ,SAAUZ,EAAG,CAClDU,GAAgBX,EAAGC,EAAG,EAAEA,CAAC,CAAC,CAC5B,CAAC,EAAI,OAAO,0BAA4B,OAAO,iBAAiBD,EAAG,OAAO,0BAA0B,CAAC,CAAC,EAAIa,GAAQ,OAAO,CAAC,CAAC,EAAE,QAAQ,SAAUZ,EAAG,CAChJ,OAAO,eAAeD,EAAGC,EAAG,OAAO,yBAAyB,EAAGA,CAAC,CAAC,CACnE,CAAC,CACH,CACA,OAAOD,CACT,CACA,SAASe,GAAyBf,EAAGD,EAAG,CACtC,GAAYC,GAAR,KAAW,MAAO,CAAC,EACvB,IAAIE,EACFD,EACAI,EAAIW,GAA8BhB,EAAGD,CAAC,EACxC,GAAI,OAAO,sBAAuB,CAChC,IAAIkB,EAAI,OAAO,sBAAsBjB,CAAC,EACtC,IAAKC,EAAI,EAAGA,EAAIgB,EAAE,OAAQhB,IAAKC,EAAIe,EAAEhB,CAAC,EAAGF,EAAE,SAASG,CAAC,GAAK,CAAC,EAAE,qBAAqB,KAAKF,EAAGE,CAAC,IAAMG,EAAEH,CAAC,EAAIF,EAAEE,CAAC,EAC7G,CACA,OAAOG,CACT,CACA,SAASW,GAA8Bf,EAAG,EAAG,CAC3C,GAAYA,GAAR,KAAW,MAAO,CAAC,EACvB,IAAI,EAAI,CAAC,EACT,QAASM,KAAKN,EAAG,GAAI,CAAC,EAAE,eAAe,KAAKA,EAAGM,CAAC,EAAG,CACjD,GAAI,EAAE,SAASA,CAAC,EAAG,SACnB,EAAEA,CAAC,EAAIN,EAAEM,CAAC,CACZ,CACA,OAAO,CACT,CACA,SAASW,IAAsB,CAC7BA,GAAsB,UAAY,CAChC,OAAO,CACT,EACA,IAAInB,EACF,EAAI,CAAC,EACLE,EAAI,OAAO,UACXM,EAAIN,EAAE,eACNC,EAAI,OAAO,gBAAkB,SAAUH,EAAGC,EAAGC,EAAG,CAC9CF,EAAEC,CAAC,EAAIC,EAAE,KACX,EACAI,EAAkB,OAAO,QAArB,WAA8B,OAAS,CAAC,EAC5CF,EAAIE,EAAE,UAAY,aAClBD,EAAIC,EAAE,eAAiB,kBACvBC,EAAID,EAAE,aAAe,gBACvB,SAASc,EAAOpB,EAAGC,EAAGC,EAAG,CACvB,OAAO,OAAO,eAAeF,EAAGC,EAAG,CACjC,MAAOC,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EACZ,CAAC,EAAGF,EAAEC,CAAC,CACT,CACA,GAAI,CACFmB,EAAO,CAAC,EAAG,EAAE,CACf,MAAY,CACVA,EAAS,SAAUpB,EAAGC,EAAGC,EAAG,CAC1B,OAAOF,EAAEC,CAAC,EAAIC,CAChB,CACF,CACA,SAASmB,EAAKrB,EAAGC,EAAGC,EAAGM,EAAG,CACxB,IAAIF,EAAIL,GAAKA,EAAE,qBAAqBqB,EAAYrB,EAAIqB,EAClDlB,GAAI,OAAO,OAAOE,EAAE,SAAS,EAC7BD,GAAI,IAAIkB,GAAQf,GAAK,CAAC,CAAC,EACzB,OAAOL,EAAEC,GAAG,UAAW,CACrB,MAAOoB,EAAiBxB,EAAGE,EAAGG,EAAC,CACjC,CAAC,EAAGD,EACN,CACA,SAASqB,EAASzB,EAAGC,EAAGC,EAAG,CACzB,GAAI,CACF,MAAO,CACL,KAAM,SACN,IAAKF,EAAE,KAAKC,EAAGC,CAAC,CAClB,CACF,OAASF,EAAG,CACV,MAAO,CACL,KAAM,QACN,IAAKA,CACP,CACF,CACF,CACA,EAAE,KAAOqB,EACT,IAAIK,EAAI,iBACNC,EAAI,iBACJC,EAAI,YACJV,EAAI,YACJ,EAAI,CAAC,EACP,SAASI,GAAY,CAAC,CACtB,SAASO,GAAoB,CAAC,CAC9B,SAASC,GAA6B,CAAC,CACvC,IAAIC,EAAI,CAAC,EACTX,EAAOW,EAAG3B,EAAG,UAAY,CACvB,OAAO,IACT,CAAC,EACD,IAAI4B,EAAI,OAAO,eACbC,EAAID,GAAKA,EAAEA,EAAEE,EAAO,CAAC,CAAC,CAAC,CAAC,EAC1BD,GAAKA,IAAM/B,GAAKM,EAAE,KAAKyB,EAAG7B,CAAC,IAAM2B,EAAIE,GACrC,IAAIE,EAAIL,EAA2B,UAAYR,EAAU,UAAY,OAAO,OAAOS,CAAC,EACpF,SAASK,EAAsBpC,EAAG,CAChC,CAAC,OAAQ,QAAS,QAAQ,EAAE,QAAQ,SAAUC,EAAG,CAC/CmB,EAAOpB,EAAGC,EAAG,SAAUD,EAAG,CACxB,OAAO,KAAK,QAAQC,EAAGD,CAAC,CAC1B,CAAC,CACH,CAAC,CACH,CACA,SAASqC,EAAcrC,EAAGC,EAAG,CAC3B,SAASqC,EAAOpC,EAAGC,GAAGG,GAAGF,GAAG,CAC1B,IAAIC,GAAIoB,EAASzB,EAAEE,CAAC,EAAGF,EAAGG,EAAC,EAC3B,GAAgBE,GAAE,OAAd,QAAoB,CACtB,IAAIE,GAAIF,GAAE,IACRqB,GAAInB,GAAE,MACR,OAAOmB,IAAiB,OAAOA,IAAnB,UAAwBlB,EAAE,KAAKkB,GAAG,SAAS,EAAIzB,EAAE,QAAQyB,GAAE,OAAO,EAAE,KAAK,SAAU1B,GAAG,CAChGsC,EAAO,OAAQtC,GAAGM,GAAGF,EAAC,CACxB,EAAG,SAAUJ,GAAG,CACdsC,EAAO,QAAStC,GAAGM,GAAGF,EAAC,CACzB,CAAC,EAAIH,EAAE,QAAQyB,EAAC,EAAE,KAAK,SAAU1B,GAAG,CAClCO,GAAE,MAAQP,GAAGM,GAAEC,EAAC,CAClB,EAAG,SAAUP,GAAG,CACd,OAAOsC,EAAO,QAAStC,GAAGM,GAAGF,EAAC,CAChC,CAAC,CACH,CACAA,GAAEC,GAAE,GAAG,CACT,CACA,IAAIH,EACJC,EAAE,KAAM,UAAW,CACjB,MAAO,SAAUH,EAAGQ,GAAG,CACrB,SAAS+B,IAA6B,CACpC,OAAO,IAAItC,EAAE,SAAUA,GAAGC,GAAG,CAC3BoC,EAAOtC,EAAGQ,GAAGP,GAAGC,EAAC,CACnB,CAAC,CACH,CACA,OAAOA,EAAIA,EAAIA,EAAE,KAAKqC,GAA4BA,EAA0B,EAAIA,GAA2B,CAC7G,CACF,CAAC,CACH,CACA,SAASf,EAAiBvB,EAAGC,EAAGM,EAAG,CACjC,IAAIL,EAAIuB,EACR,OAAO,SAAUpB,EAAGF,GAAG,CACrB,GAAID,IAAMyB,EAAG,MAAM,MAAM,8BAA8B,EACvD,GAAIzB,IAAMe,EAAG,CACX,GAAgBZ,IAAZ,QAAe,MAAMF,GACzB,MAAO,CACL,MAAOJ,EACP,KAAM,EACR,CACF,CACA,IAAKQ,EAAE,OAASF,EAAGE,EAAE,IAAMJ,KAAK,CAC9B,IAAIC,GAAIG,EAAE,SACV,GAAIH,GAAG,CACL,IAAIE,GAAIiC,EAAoBnC,GAAGG,CAAC,EAChC,GAAID,GAAG,CACL,GAAIA,KAAM,EAAG,SACb,OAAOA,EACT,CACF,CACA,GAAeC,EAAE,SAAb,OAAqBA,EAAE,KAAOA,EAAE,MAAQA,EAAE,YAAyBA,EAAE,SAAd,QAAsB,CAC/E,GAAIL,IAAMuB,EAAG,MAAMvB,EAAIe,EAAGV,EAAE,IAC5BA,EAAE,kBAAkBA,EAAE,GAAG,CAC3B,MAAoBA,EAAE,SAAf,UAAyBA,EAAE,OAAO,SAAUA,EAAE,GAAG,EACxDL,EAAIyB,EACJ,IAAIG,GAAIN,EAASxB,EAAGC,EAAGM,CAAC,EACxB,GAAiBuB,GAAE,OAAf,SAAqB,CACvB,GAAI5B,EAAIK,EAAE,KAAOU,EAAIS,EAAGI,GAAE,MAAQ,EAAG,SACrC,MAAO,CACL,MAAOA,GAAE,IACT,KAAMvB,EAAE,IACV,CACF,CACYuB,GAAE,OAAd,UAAuB5B,EAAIe,EAAGV,EAAE,OAAS,QAASA,EAAE,IAAMuB,GAAE,IAC9D,CACF,CACF,CACA,SAASS,EAAoBvC,EAAGC,EAAG,CACjC,IAAIM,EAAIN,EAAE,OACRC,EAAIF,EAAE,SAASO,CAAC,EAClB,GAAIL,IAAMH,EAAG,OAAOE,EAAE,SAAW,KAAkBM,IAAZ,SAAiBP,EAAE,SAAS,SAAWC,EAAE,OAAS,SAAUA,EAAE,IAAMF,EAAGwC,EAAoBvC,EAAGC,CAAC,EAAeA,EAAE,SAAd,UAAsCM,IAAb,WAAmBN,EAAE,OAAS,QAASA,EAAE,IAAM,IAAI,UAAU,oCAAsCM,EAAI,UAAU,GAAI,EACvR,IAAIF,EAAImB,EAAStB,EAAGF,EAAE,SAAUC,EAAE,GAAG,EACrC,GAAgBI,EAAE,OAAd,QAAoB,OAAOJ,EAAE,OAAS,QAASA,EAAE,IAAMI,EAAE,IAAKJ,EAAE,SAAW,KAAM,EACrF,IAAIE,GAAIE,EAAE,IACV,OAAOF,GAAIA,GAAE,MAAQF,EAAED,EAAE,UAAU,EAAIG,GAAE,MAAOF,EAAE,KAAOD,EAAE,QAAsBC,EAAE,SAAf,WAA0BA,EAAE,OAAS,OAAQA,EAAE,IAAMF,GAAIE,EAAE,SAAW,KAAM,GAAKE,IAAKF,EAAE,OAAS,QAASA,EAAE,IAAM,IAAI,UAAU,kCAAkC,EAAGA,EAAE,SAAW,KAAM,EAC9P,CACA,SAASuC,EAAazC,EAAG,CACvB,IAAIC,EAAI,CACN,OAAQD,EAAE,CAAC,CACb,EACA,KAAKA,IAAMC,EAAE,SAAWD,EAAE,CAAC,GAAI,KAAKA,IAAMC,EAAE,WAAaD,EAAE,CAAC,EAAGC,EAAE,SAAWD,EAAE,CAAC,GAAI,KAAK,WAAW,KAAKC,CAAC,CAC3G,CACA,SAASyC,GAAc1C,EAAG,CACxB,IAAIC,EAAID,EAAE,YAAc,CAAC,EACzBC,EAAE,KAAO,SAAU,OAAOA,EAAE,IAAKD,EAAE,WAAaC,CAClD,CACA,SAASsB,GAAQvB,EAAG,CAClB,KAAK,WAAa,CAAC,CACjB,OAAQ,MACV,CAAC,EAAGA,EAAE,QAAQyC,EAAc,IAAI,EAAG,KAAK,MAAM,EAAE,CAClD,CACA,SAASP,EAAOjC,EAAG,CACjB,GAAIA,GAAYA,IAAP,GAAU,CACjB,IAAIC,EAAID,EAAEG,CAAC,EACX,GAAIF,EAAG,OAAOA,EAAE,KAAKD,CAAC,EACtB,GAAkB,OAAOA,EAAE,MAAvB,WAA6B,OAAOA,EACxC,GAAI,CAAC,MAAMA,EAAE,MAAM,EAAG,CACpB,IAAIE,EAAI,GACNG,EAAI,SAASqC,GAAO,CAClB,KAAO,EAAExC,EAAIF,EAAE,QAAS,GAAIO,EAAE,KAAKP,EAAGE,CAAC,EAAG,OAAOwC,EAAK,MAAQ1C,EAAEE,CAAC,EAAGwC,EAAK,KAAO,GAAIA,EACpF,OAAOA,EAAK,MAAQ3C,EAAG2C,EAAK,KAAO,GAAIA,CACzC,EACF,OAAOrC,EAAE,KAAOA,CAClB,CACF,CACA,MAAM,IAAI,UAAU,OAAOL,EAAI,kBAAkB,CACnD,CACA,OAAO4B,EAAkB,UAAYC,EAA4B3B,EAAEgC,EAAG,cAAe,CACnF,MAAOL,EACP,aAAc,EAChB,CAAC,EAAG3B,EAAE2B,EAA4B,cAAe,CAC/C,MAAOD,EACP,aAAc,EAChB,CAAC,EAAGA,EAAkB,YAAcT,EAAOU,EAA4BvB,EAAG,mBAAmB,EAAG,EAAE,oBAAsB,SAAUP,EAAG,CACnI,IAAIC,EAAkB,OAAOD,GAArB,YAA0BA,EAAE,YACpC,MAAO,CAAC,CAACC,IAAMA,IAAM4B,IAA8C5B,EAAE,aAAeA,EAAE,QAA5C,oBAC5C,EAAG,EAAE,KAAO,SAAUD,EAAG,CACvB,OAAO,OAAO,eAAiB,OAAO,eAAeA,EAAG8B,CAA0B,GAAK9B,EAAE,UAAY8B,EAA4BV,EAAOpB,EAAGO,EAAG,mBAAmB,GAAIP,EAAE,UAAY,OAAO,OAAOmC,CAAC,EAAGnC,CACvM,EAAG,EAAE,MAAQ,SAAUA,EAAG,CACxB,MAAO,CACL,QAASA,CACX,CACF,EAAGoC,EAAsBC,EAAc,SAAS,EAAGjB,EAAOiB,EAAc,UAAWhC,EAAG,UAAY,CAChG,OAAO,IACT,CAAC,EAAG,EAAE,cAAgBgC,EAAe,EAAE,MAAQ,SAAUrC,EAAGE,EAAGM,EAAGL,EAAGG,EAAG,CAC3DA,IAAX,SAAiBA,EAAI,SACrB,IAAIF,GAAI,IAAIiC,EAAchB,EAAKrB,EAAGE,EAAGM,EAAGL,CAAC,EAAGG,CAAC,EAC7C,OAAO,EAAE,oBAAoBJ,CAAC,EAAIE,GAAIA,GAAE,KAAK,EAAE,KAAK,SAAUJ,GAAG,CAC/D,OAAOA,GAAE,KAAOA,GAAE,MAAQI,GAAE,KAAK,CACnC,CAAC,CACH,EAAGgC,EAAsBD,CAAC,EAAGf,EAAOe,EAAG5B,EAAG,WAAW,EAAGa,EAAOe,EAAG/B,EAAG,UAAY,CAC/E,OAAO,IACT,CAAC,EAAGgB,EAAOe,EAAG,WAAY,UAAY,CACpC,MAAO,oBACT,CAAC,EAAG,EAAE,KAAO,SAAUnC,EAAG,CACxB,IAAIC,EAAI,OAAOD,CAAC,EACdE,EAAI,CAAC,EACP,QAASM,KAAKP,EAAGC,EAAE,KAAKM,CAAC,EACzB,OAAON,EAAE,QAAQ,EAAG,SAASyC,GAAO,CAClC,KAAOzC,EAAE,QAAS,CAChB,IAAIF,GAAIE,EAAE,IAAI,EACd,GAAIF,MAAKC,EAAG,OAAO0C,EAAK,MAAQ3C,GAAG2C,EAAK,KAAO,GAAIA,CACrD,CACA,OAAOA,EAAK,KAAO,GAAIA,CACzB,CACF,EAAG,EAAE,OAAST,EAAQX,GAAQ,UAAY,CACxC,YAAaA,GACb,MAAO,SAAUtB,EAAG,CAClB,GAAI,KAAK,KAAO,EAAG,KAAK,KAAO,EAAG,KAAK,KAAO,KAAK,MAAQD,EAAG,KAAK,KAAO,GAAI,KAAK,SAAW,KAAM,KAAK,OAAS,OAAQ,KAAK,IAAMA,EAAG,KAAK,WAAW,QAAQ0C,EAAa,EAAG,CAACzC,EAAG,QAASC,KAAK,KAAcA,EAAE,OAAO,CAAC,IAAlB,KAAuBM,EAAE,KAAK,KAAMN,CAAC,GAAK,CAAC,MAAM,CAACA,EAAE,MAAM,CAAC,CAAC,IAAM,KAAKA,CAAC,EAAIF,EACtR,EACA,KAAM,UAAY,CAChB,KAAK,KAAO,GACZ,IAAIA,EAAI,KAAK,WAAW,CAAC,EAAE,WAC3B,GAAgBA,EAAE,OAAd,QAAoB,MAAMA,EAAE,IAChC,OAAO,KAAK,IACd,EACA,kBAAmB,SAAUC,EAAG,CAC9B,GAAI,KAAK,KAAM,MAAMA,EACrB,IAAIC,EAAI,KACR,SAAS0C,EAAOpC,GAAGL,GAAG,CACpB,OAAOC,GAAE,KAAO,QAASA,GAAE,IAAMH,EAAGC,EAAE,KAAOM,GAAGL,KAAMD,EAAE,OAAS,OAAQA,EAAE,IAAMF,GAAI,CAAC,CAACG,EACzF,CACA,QAASA,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CACpD,IAAIG,EAAI,KAAK,WAAWH,CAAC,EACvBC,GAAIE,EAAE,WACR,GAAeA,EAAE,SAAb,OAAqB,OAAOsC,EAAO,KAAK,EAC5C,GAAItC,EAAE,QAAU,KAAK,KAAM,CACzB,IAAID,GAAIG,EAAE,KAAKF,EAAG,UAAU,EAC1BC,GAAIC,EAAE,KAAKF,EAAG,YAAY,EAC5B,GAAID,IAAKE,GAAG,CACV,GAAI,KAAK,KAAOD,EAAE,SAAU,OAAOsC,EAAOtC,EAAE,SAAU,EAAE,EACxD,GAAI,KAAK,KAAOA,EAAE,WAAY,OAAOsC,EAAOtC,EAAE,UAAU,CAC1D,SAAWD,IACT,GAAI,KAAK,KAAOC,EAAE,SAAU,OAAOsC,EAAOtC,EAAE,SAAU,EAAE,MACnD,CACL,GAAI,CAACC,GAAG,MAAM,MAAM,wCAAwC,EAC5D,GAAI,KAAK,KAAOD,EAAE,WAAY,OAAOsC,EAAOtC,EAAE,UAAU,CAC1D,CACF,CACF,CACF,EACA,OAAQ,SAAUN,EAAGC,EAAG,CACtB,QAASC,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CACpD,IAAIC,EAAI,KAAK,WAAWD,CAAC,EACzB,GAAIC,EAAE,QAAU,KAAK,MAAQK,EAAE,KAAKL,EAAG,YAAY,GAAK,KAAK,KAAOA,EAAE,WAAY,CAChF,IAAIG,EAAIH,EACR,KACF,CACF,CACAG,IAAkBN,IAAZ,SAAgCA,IAAf,aAAqBM,EAAE,QAAUL,GAAKA,GAAKK,EAAE,aAAeA,EAAI,MACvF,IAAIF,GAAIE,EAAIA,EAAE,WAAa,CAAC,EAC5B,OAAOF,GAAE,KAAOJ,EAAGI,GAAE,IAAMH,EAAGK,GAAK,KAAK,OAAS,OAAQ,KAAK,KAAOA,EAAE,WAAY,GAAK,KAAK,SAASF,EAAC,CACzG,EACA,SAAU,SAAUJ,EAAGC,EAAG,CACxB,GAAgBD,EAAE,OAAd,QAAoB,MAAMA,EAAE,IAChC,OAAmBA,EAAE,OAAd,SAAqCA,EAAE,OAAjB,WAAwB,KAAK,KAAOA,EAAE,IAAmBA,EAAE,OAAf,UAAuB,KAAK,KAAO,KAAK,IAAMA,EAAE,IAAK,KAAK,OAAS,SAAU,KAAK,KAAO,OAAsBA,EAAE,OAAf,UAAuBC,IAAM,KAAK,KAAOA,GAAI,CAC1N,EACA,OAAQ,SAAUD,EAAG,CACnB,QAASC,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CACpD,IAAIC,EAAI,KAAK,WAAWD,CAAC,EACzB,GAAIC,EAAE,aAAeF,EAAG,OAAO,KAAK,SAASE,EAAE,WAAYA,EAAE,QAAQ,EAAGwC,GAAcxC,CAAC,EAAG,CAC5F,CACF,EACA,MAAO,SAAUF,EAAG,CAClB,QAASC,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CACpD,IAAIC,EAAI,KAAK,WAAWD,CAAC,EACzB,GAAIC,EAAE,SAAWF,EAAG,CAClB,IAAIQ,EAAIN,EAAE,WACV,GAAgBM,EAAE,OAAd,QAAoB,CACtB,IAAIL,EAAIK,EAAE,IACVkC,GAAcxC,CAAC,CACjB,CACA,OAAOC,CACT,CACF,CACA,MAAM,MAAM,uBAAuB,CACrC,EACA,cAAe,SAAUF,EAAGC,EAAGM,EAAG,CAChC,OAAO,KAAK,SAAW,CACrB,SAAU0B,EAAOjC,CAAC,EAClB,WAAYC,EACZ,QAASM,CACX,EAAc,KAAK,SAAhB,SAA2B,KAAK,IAAMR,GAAI,CAC/C,CACF,EAAG,CACL,CACA,SAAS6C,GAAa7C,EAAGE,EAAG,CAC1B,GAAgB,OAAOF,GAAnB,UAAwB,CAACA,EAAG,OAAOA,EACvC,IAAIC,EAAID,EAAE,OAAO,WAAW,EAC5B,GAAeC,IAAX,OAAc,CAChB,IAAI,EAAIA,EAAE,KAAKD,EAAGE,GAAK,SAAS,EAChC,GAAgB,OAAO,GAAnB,SAAsB,OAAO,EACjC,MAAM,IAAI,UAAU,8CAA8C,CACpE,CACA,OAAqBA,IAAb,SAAiB,OAAS,QAAQF,CAAC,CAC7C,CACA,SAASa,GAAeb,EAAG,CACzB,IAAIM,EAAIuC,GAAa7C,EAAG,QAAQ,EAChC,OAAmB,OAAOM,GAAnB,SAAuBA,EAAIA,EAAI,EACxC,CAEA,IAAIwC,GAAW,CACb,QAAS,UACT,GAAI,IACN,EACIC,GAAiBD,GAAS,GAC1BE,GAAsB,0CACtBC,GAAsB,6CACtBC,GAAoB,CACtB,IAAKF,EACP,EACIG,GAAsB,CACxB,IAAKF,EACP,EAEA,SAASG,GAAWC,EAAQ,CAC1B,OAAO,SAAS,cAAc,eAAgB,OAAOA,EAAQ,IAAK,CAAC,GAAK,MAC1E,CACA,SAASC,GAAaC,EAAK,CACzB,IAAIC,EAAS,SAAS,cAAc,QAAQ,EAC5CA,EAAO,IAAMD,EACb,IAAIE,EAAa,SAAS,MAAQ,SAAS,KAC3C,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,+DAA+D,EAEjF,OAAAA,EAAW,YAAYD,CAAM,EACtBA,CACT,CACA,IAAIE,GAAa,CACf,QAAS,OACT,GAAI,MACN,EACIC,GAAqB,CACvB,QAAS,gBACT,GAAI,iBACN,EACA,SAASC,GAAYC,EAAS,CAC5B,IAAIC,EACAT,GAAUS,EAAwBC,GAAyBF,CAAO,KAAO,MAAQC,IAA0B,OAAS,OAASA,EAAsB,IACvJ,GAAKT,EAIL,KAAIW,EAAkBN,GAAWG,CAAO,EACpCI,EAAqBN,GAAmBE,CAAO,EACnD,OAAIG,IAAoB,OACfA,GAETN,GAAWG,CAAO,EAAI,IAAI,QAAQ,SAAUK,EAASC,EAAQ,CAC3D,GAAI,OAAO,OAAW,IAAa,CAEjCD,EAAQ,MAAS,EACjB,MACF,CAEA,GAAI,OAAOD,CAAkB,EAAG,CAC9BC,EAAQ,OAAOD,CAAkB,CAAC,EAClC,MACF,CACA,GAAI,CAEF,IAAIT,EAASJ,GAAWC,CAAM,EACzBG,IACHA,EAASF,GAAaD,CAAM,GAG9BG,EAAO,iBAAiB,OAAQ,UAAY,CACtC,OAAOS,CAAkB,EAC3BC,EAAQ,OAAOD,CAAkB,CAAC,EAElCE,EAAO,IAAI,MAAM,yBAAyB,CAAC,CAE/C,CAAC,EAEDX,EAAO,iBAAiB,QAAS,UAAY,CAC3CW,EAAO,IAAI,MAAM,8BAA8B,OAAON,CAAO,CAAC,CAAC,CACjE,CAAC,CACH,OAASO,EAAO,CACdD,EAAOC,CAAK,EACZ,MACF,CACF,CAAC,EACMV,GAAWG,CAAO,GAC3B,CACA,SAASE,GAAyBF,EAAS,CACzC,GAAIA,IAAYf,GAAS,QACvB,OAAOI,GAET,GAAIW,IAAYf,GAAS,GACvB,OAAOK,GAEP,QAAQ,MAAM,iCAAiC,CAGnD,CAEA,IAAIkB,GAAY,CAAC,cAAe,SAAS,EACvCC,GAAa,CAAC,cAAe,SAAS,EACxC,SAASC,GAA0BC,EAASC,EAAQ,CAClD,IAAIC,EAAcF,EAAQ,YACxBA,EAAQ,QACR,IAAIG,EAAO3D,GAAyBwD,EAASH,EAAS,EACxD,GAAI,CACEK,GACFD,EAAO,YAAY,IAAIC,CAAW,EAEhCD,EAAO,YACTA,EAAO,OAAO1D,GAAe,CAAC,EAAG4D,CAAI,CAAC,EAEtCF,EAAO,WAAW1D,GAAe,CAAC,EAAG4D,CAAI,CAAC,CAE9C,OAAS1E,EAAG,CACV,QAAQ,KAAK,iEAAkEA,CAAC,CAClF,CACF,CAEA,SAAS2E,GAAwBJ,EAASC,EAAQ,CAChD,IAAIC,EAAcF,EAAQ,YACxBA,EAAQ,QACR,IAAIG,EAAO3D,GAAyBwD,EAASF,EAAU,EACzD,GAAI,CACEI,GACFD,EAAO,YAAY,IAAIC,CAAW,EAEpCD,EAAO,MAAM1D,GAAe,CAAC,EAAG4D,CAAI,CAAC,CACvC,OAAS1E,EAAG,CACV,QAAQ,KAAK,iEAAkEA,CAAC,CAClF,CACF,CAGA,IAAI4E,IACH,SAAUA,EAAoB,CAC7BA,EAAmB,gBAAqB,kBACxCA,EAAmB,gBAAqB,kBACxCA,EAAmB,iBAAsB,mBACzCA,EAAmB,mBAAwB,qBAC3CA,EAAmB,eAAoB,iBACvCA,EAAmB,gBAAqB,kBACxCA,EAAmB,uBAA4B,yBAC/CA,EAAmB,uBAA4B,yBAC/CA,EAAmB,0BAA+B,4BAClDA,EAAmB,0BAA+B,4BAClDA,EAAmB,0BAA+B,4BAClDA,EAAmB,0BAA+B,4BAClDA,EAAmB,2BAAgC,6BACnDA,EAAmB,wBAA6B,0BAChDA,EAAmB,0BAA+B,4BAClDA,EAAmB,0BAA+B,2BACpD,GAAGA,KAAuBA,GAAqB,CAAC,EAAE,EAClD,IAAIC,IACH,SAAUA,EAAkC,CAC3CA,EAAiC,IAAS,MAC1CA,EAAiC,KAAU,OAC3CA,EAAiC,MAAW,QAC5CA,EAAiC,KAAU,MAC7C,GAAGA,KAAqCA,GAAmC,CAAC,EAAE,EAC9E,IAAIC,IACH,SAAUA,EAAkC,CAC3CA,EAAiC,OAAY,SAC7CA,EAAiC,UAAe,YAChDA,EAAiC,KAAU,OAC3CA,EAAiC,WAAgB,aACjDA,EAAiC,MAAW,QAC5CA,EAAiC,OAAY,SAC7CA,EAAiC,cAAmB,gBACpDA,EAAiC,KAAU,MAC7C,GAAGA,KAAqCA,GAAmC,CAAC,EAAE,EAC9E,IAAIC,IACH,SAAUA,EAAsC,CAC/CA,EAAqC,iBAAsB,mBAC3DA,EAAqC,YAAiB,cACtDA,EAAqC,SAAc,WACnDA,EAAqC,IAAS,MAC9CA,EAAqC,KAAU,OAC/CA,EAAqC,QAAa,UAClDA,EAAqC,YAAiB,aACtDA,EAAqC,UAAe,YACpDA,EAAqC,KAAU,OAC/CA,EAAqC,QAAa,SACpD,GAAGA,KAAyCA,GAAuC,CAAC,EAAE,EACtF,IAAIC,IACH,SAAUA,EAAsB,CAC/BA,EAAqB,MAAW,QAChCA,EAAqB,MAAW,QAChCA,EAAqB,UAAe,YACpCA,EAAqB,OAAY,SACjCA,EAAqB,SAAc,WACnCA,EAAqB,SAAc,UACrC,GAAGA,KAAyBA,GAAuB,CAAC,EAAE,EAEtD,SAASC,GAAiBC,EAAI,CAC5B,OAAOC,GAAkB,MAAM,KAAM,SAAS,CAChD,CACA,SAASA,IAAoB,CAC3B,OAAAA,GAAoB3E,GAA+BU,GAAoB,EAAE,KAAK,SAASkE,EAAQb,EAAS,CACtG,IAAIc,EAAkBb,EACtB,OAAOtD,GAAoB,EAAE,KAAK,SAAkBoE,EAAU,CAC5D,OAAU,OAAQA,EAAS,KAAOA,EAAS,KAAM,CAC/C,IAAK,GACH,OAAAD,EAAsEd,GAAQ,SAAYzB,GAC1FwC,EAAS,KAAO,EACT3B,GAAY0B,CAAgB,EACrC,IAAK,GAEH,GADAb,EAASc,EAAS,KACd,CAACd,EAAQ,CACXc,EAAS,KAAO,EAChB,KACF,CACA,OAAIf,IACEc,IAAqBxC,GAAS,GAChCyB,GAA0BC,EAASC,CAAM,EAChCa,IAAqBxC,GAAS,SACvC8B,GAAwBJ,EAASC,CAAM,GAGpCc,EAAS,OAAO,SAAUd,CAAM,EACzC,IAAK,GACH,eAAQ,MAAM,+BAA+B,EACtCc,EAAS,OAAO,QAAQ,EACjC,IAAK,IACL,IAAK,MACH,OAAOA,EAAS,KAAK,CACzB,CACF,EAAGF,CAAO,CACZ,CAAC,CAAC,EACKD,GAAkB,MAAM,KAAM,SAAS,CAChD,CCtmBe,SAARI,IAAkC,CACvC,MAAO,CACL,OAAQ,KACR,MAAO,CACL,GAAM,CACJ,cAAAC,EACA,WAAAC,EACA,YAAAC,EACA,WAAAC,EACA,YAAAC,CACF,EAAI,KAAK,IAAI,QACbC,GAAiB,CACf,MAAOH,EACP,WAAY,CACV,GAAID,CACN,EACA,YAAAG,CACF,CAAC,EAAE,KAAME,GAAW,CAClB,KAAK,OAASA,EACdA,EAAO,SAAS,KAAK,CACnB,YAAa,GACb,YAAa,UACb,WAAYH,EACZ,cAAeH,CACjB,CAAC,CACH,CAAC,CACH,CACF,CACF,CC9Be,SAARO,IAAsC,CAC3C,MAAO,CACL,gBAAiB,IAAI,IACrB,OAAQ,IAAI,IACZ,MAAO,CACL,GAAM,CAAE,SAAAC,CAAS,EAAI,KAAK,IAAI,QAC9BA,EAAS,MAAM,GAAG,EAAE,QAASC,GAAU,KAAK,OAAO,IAAIA,CAAK,CAAC,CAC/D,EACA,iBAAkB,CAChB,GAAI,KAAK,OAAO,OAAO,QACrB,QAASC,KAAM,KAAK,OAAO,OAAO,EAChC,KAAK,gBAAgB,IAAIA,CAAE,OAG7B,KAAK,gBAAgB,MAAM,CAE/B,EACA,cAAe,CACT,KAAK,OAAO,OAAO,QACrB,KAAK,gBAAgB,IAAI,KAAK,OAAO,OAAO,KAAK,EAEjD,KAAK,gBAAgB,OAAO,KAAK,OAAO,OAAO,KAAK,CAExD,CACF,CACF,CCzBe,SAARC,IAA6B,CAClC,MAAO,CACL,UAAW,KACX,MAAO,CACL,GAAM,CAAE,MAAAC,CAAM,EAAI,KAAK,IAAI,QAC3B,KAAK,UAAYA,CACnB,EACA,aAAc,CACZ,KAAK,MAAM,WAAW,aACpB,eACA,KAAK,MAAM,WAAW,aAAa,cAAc,IAAM,QACnD,OACA,OACN,EACA,KAAK,MAAM,WAAW,QAAU,CAAC,KAAK,MAAM,WAAW,QACvD,KAAK,MAAM,KAAK,UAAU,OAAO,eAAe,EAChD,KAAK,IAAI,UAAU,OAAO,aAAa,EACvC,KAAK,IAAI,UAAU,OAAO,aAAa,EACvC,KAAK,KAAK,SAAS,EAAI,CAAC,KAAK,KAAK,SAAS,CAC7C,CACF,CACF,CCrBe,SAARC,IAA4B,CACjC,MAAO,CACL,YAAa,KACb,OAAQ,GACR,sBAAuB,GACvB,MAAO,CACL,IAAMC,EAAU,KAAK,MAAM,KAAK,IAAI,QAAQ,OAAO,EAC7C,CAAE,YAAAC,CAAY,EAAI,KAAK,IAAI,QAC7BD,IACF,KAAK,gBAAkBA,GAEzB,KAAK,YAAcC,CACrB,EACA,0BAA2B,CACzB,KAAK,sBAAwB,GAC7B,KAAK,UAAU,gBAAgB,CACjC,EACA,6BAA8B,CAC5B,KAAK,sBAAwB,EAC/B,EACA,iBAAkB,CAChB,OAAO,KAAK,wBAA0B,EACxC,EACA,qBAAsB,CACpB,KAAK,gBAAkB,IACzB,EACA,0BAA2B,CACzB,SAAS,cAAc,IAAI,MAAM,oBAAoB,CAAC,CACxD,CACF,CACF,CC9Be,SAARC,IAA6B,CAClC,MAAO,CACL,KAAM,QACN,YAAa,IAAI,KACjB,kBAAmB,CACjB,IAAMC,EAAO,KAAK,YACZC,EAAU,CACd,QAAS,OACT,KAAM,UACN,MAAO,OACP,IAAK,SACP,EAEA,GAAI,KAAK,OAAS,QAChB,OAAOD,EAAK,mBAAmB,QAASC,CAAO,EAC1C,GAAI,KAAK,OAAS,SAAU,CACjC,IAAMC,EAAc,IAAI,KAAKF,CAAI,EAC3BG,EAAMH,EAAK,OAAO,EAClBI,EAAOJ,EAAK,QAAQ,EAAIG,GAAOA,IAAQ,EAAI,GAAK,GACtDD,EAAY,QAAQE,CAAI,EAExB,IAAMC,EAAY,IAAI,KAAKH,CAAW,EACtCG,EAAU,QAAQH,EAAY,QAAQ,EAAI,CAAC,EAE3C,IAAMI,EAAaJ,EAAY,mBAAmB,QAAS,CACzD,MAAO,MACT,CAAC,EACKK,EAAWF,EAAU,mBAAmB,QAAS,CACrD,MAAO,MACT,CAAC,EAED,OAAIC,IAAeC,EACV,GAAGD,CAAU,IAAIJ,EAAY,QAAQ,CAAC,MAAMG,EAAU,QAAQ,CAAC,KAAKH,EAAY,YAAY,CAAC,GAE7F,GAAGI,CAAU,IAAIJ,EAAY,QAAQ,CAAC,MAAMK,CAAQ,IAAIF,EAAU,QAAQ,CAAC,KAAKH,EAAY,YAAY,CAAC,EAEpH,SAAW,KAAK,OAAS,UACvB,OAAOF,EAAK,mBAAmB,QAAS,CACtC,MAAO,OACP,KAAM,SACR,CAAC,CAEL,EACA,qBAAqBQ,EAAW,CAE9B,GAAM,CAACC,EAAOC,CAAO,EAAIF,EAAU,MAAM,GAAG,EAAE,IAAI,MAAM,EASxD,MAAO,IANsBC,EAAQ,GAAKC,GAIE,GAAM,EAE7B,IACvB,EACA,gBAAgBF,EAAWG,EAAS,CAElC,GAAM,CAACC,EAAYC,CAAY,EAAIL,EAAU,MAAM,GAAG,EAAE,IAAI,MAAM,EAC5D,CAACM,EAAUC,CAAU,EAAIJ,EAAQ,MAAM,GAAG,EAAE,IAAI,MAAM,EAGtDK,EAA4BJ,EAAa,GAAKC,EAQpD,MAAO,GAPyBC,EAAW,GAAKC,EAEpBC,CAKZ,IAClB,EACA,kBAAmB,CAEjB,OAAO,OAAO,WAAa,IAAM,GAAK,EACxC,CACF,CACF,CC3Ee,SAARC,IAAuC,CAC5C,MAAO,CACL,kBAAmB,KACnB,MAAO,CACL,KAAK,kBAAoBC,GAAU,KAAK,IAAK,CAC3C,QAAS,IAAI,KACb,SAAU,CAACC,EAAeC,EAASC,IAAa,CAC9C,IAAMC,EAAM,IAAI,IAAI,OAAO,QAAQ,EACnCA,EAAI,aAAa,IAAI,OAAQF,CAAO,EACpC,OAAO,SAAWE,EAAI,SAAS,CACjC,CACF,CAAC,CACH,CACF,CACF,CChBe,SAARC,IAAkC,CACvC,MAAO,CACL,aAAc,KACd,mBAAoB,GACpB,MAAO,CACL,GAAM,CAAE,KAAAC,CAAK,EAAI,KAAK,IAAI,QACtBA,IACF,KAAK,aAAe,KAAK,MAAMA,CAAI,EAEvC,EACA,kBAAmB,CACjB,OAAO,KAAK,cAAc,MAAQ,MACpC,EACA,mBAAoB,CAClB,KAAK,aAAe,IACtB,EACA,oBAAqB,CACnB,KAAK,mBAAqB,GAC1B,KAAK,UAAU,sBAAsB,CACvC,EACA,oBAAqB,CACnB,KAAK,mBAAqB,GAC1B,KAAK,OAAO,OAAO,UAAY,EACjC,EACA,mBAAoB,CAClB,OAAO,KAAK,qBAAuB,EACrC,EACA,gBAAiB,CACf,OAAO,KAAK,aAAe,KAAK,aAAa,GAAK,EACpD,CACF,CACF,C5GNA,OAAO,OAASC,GAEhBA,GAAO,OAAOA,EAAM,EAIpB,SAAS,iBAAiB,mBAAoB,IAAM,CAClD,SAAS,cAAc,IAAI,MAAM,gBAAgB,CAAC,EAClDA,GAAO,MAAM,CACf,CAAC,EAED,SAAS,iBAAiB,qBAAuBC,GAAQ,CACvDA,EAAI,OAAO,QAAQ,aAAa,EAAIC,GAAU,WAAW,CAC3D,CAAC,EAED,SAAS,iBAAiB,iBAAkB,IAAM,CAChD,GAAAC,QAAK,KAAK,CACR,MAAO,QACP,KAAM,uCACN,KAAM,OACR,CAAC,CACH,CAAC,EAED,SAAS,iBAAiB,cAAe,IAAM,CAC7CH,GAAO,KAAK,2BAA4BI,EAAwB,EAChEJ,GAAO,KAAK,gBAAiBK,EAAa,EAC1CL,GAAO,KAAK,qBAAsB,KAAO,CACvC,SAAU,KACV,MAAO,CACL,KAAK,SAAW,KAAK,IAAI,QAAQ,QACnC,EACA,aAAc,CACZ,SAAS,cAAc,KAAK,QAAQ,EAAE,cAAc,MAAM,CAC5D,CACF,EAAE,EACFA,GAAO,KAAK,eAAgBM,EAAY,EACxCN,GAAO,KAAK,8BAA+B,KAAO,CAChD,aAAc,CACZ,KAAK,UAAU,0BAA0B,CAC3C,CACF,EAAE,EACFA,GAAO,KAAK,WAAYO,EAAQ,EAChCP,GAAO,KAAK,iBAAkBQ,EAAc,EAC5CR,GAAO,KAAK,eAAgBS,EAAY,EACxCT,GAAO,KAAK,+BAAgCU,EAA4B,EACxEV,GAAO,KAAK,QAASW,EAAK,EAC1BX,GAAO,KAAK,QAASY,EAAK,EAC1BZ,GAAO,KAAK,QAASa,EAAK,EAC1Bb,GAAO,KAAK,iBAAkBc,EAAc,EAC5Cd,GAAO,KAAK,YAAae,EAAS,EAClCf,GAAO,KAAK,sBAAuBgB,EAAmB,EACtDhB,GAAO,KAAK,iBAAkBiB,EAAc,EAC5CjB,GAAO,KAAK,gBAAiBkB,EAAa,EAC1ClB,GAAO,KAAK,qBAAsBmB,EAAkB,EACpDnB,GAAO,KAAK,YAAaoB,EAAS,EAClCpB,GAAO,KAAK,6BAA8BqB,EAA0B,EACpErB,GAAO,KAAK,qBAAsBsB,EAAkB,EACpDtB,GAAO,KAAK,cAAeuB,EAAW,EACtCvB,GAAO,KAAK,yBAA0BwB,EAAsB,CAC9D,CAAC",
  "names": ["require_sweetalert2_all", "__commonJSMin", "exports", "module", "global", "factory", "_assertClassBrand", "e", "t", "n", "_checkPrivateRedeclaration", "_classPrivateFieldGet2", "s", "a", "_classPrivateFieldInitSpec", "_classPrivateFieldSet2", "r", "RESTORE_FOCUS_TIMEOUT", "globalState", "focusPreviousActiveElement", "restoreActiveElement", "returnFocus", "resolve", "x", "y", "swalPrefix", "swalClasses", "acc", "className", "iconTypes", "icon", "consolePrefix", "capitalizeFirstLetter", "str", "warn", "message", "error", "previousWarnOnceMessages", "warnOnce", "warnAboutDeprecation", "deprecatedParam", "useInstead", "callIfFunction", "arg", "hasToPromiseFn", "asPromise", "isPromise", "getContainer", "elementBySelector", "selectorString", "container", "elementByClass", "getPopup", "getIcon", "getIconContent", "getTitle", "getHtmlContainer", "getImage", "getProgressSteps", "getValidationMessage", "getConfirmButton", "getCancelButton", "getDenyButton", "getInputLabel", "getLoader", "getActions", "getFooter", "getTimerProgressBar", "getCloseButton", "focusable", "getFocusableElements", "popup", "focusableElementsWithTabindex", "focusableElementsWithTabindexSorted", "b", "tabindexA", "tabindexB", "otherFocusableElements", "otherFocusableElementsFiltered", "el", "isVisible$1", "isModal", "hasClass", "isToast", "isLoading", "setInnerHtml", "elem", "html", "parsed", "head", "child", "body", "classList", "i", "removeCustomClasses", "params", "applyCustomClass", "customClass", "addClass", "getInput$1", "inputClass", "focusInput", "input", "val", "toggleClass", "target", "condition", "removeClass", "getDirectChildByClass", "children", "applyNumericalStyle", "property", "value", "show", "display", "hide", "showWhenInnerHtmlPresent", "toggle", "setStyle", "parent", "selector", "allButtonsAreHidden", "isScrollable", "selfOrParentIsScrollable", "element", "stopElement", "hasCssAnimation", "style", "animDuration", "transDuration", "animateTimerProgressBar", "timer", "reset", "timerProgressBar", "stopTimerProgressBar", "timerProgressBarWidth", "timerProgressBarFullWidth", "timerProgressBarPercent", "isNodeEnv", "sweetHTML", "resetOldContainer", "oldContainer", "resetValidationMessage$1", "addInputChangeListeners", "file", "range", "rangeOutput", "select", "checkbox", "textarea", "getTarget", "setupAccessibility", "setupRTL", "targetElement", "init", "oldContainerExisted", "parseHtmlToContainer", "param", "handleObject", "handleJqueryElem", "renderActions", "instance", "actions", "loader", "renderButtons", "confirmButton", "denyButton", "cancelButton", "renderButton", "handleButtonsStyling", "applyOutlineColor", "button", "buttonStyle", "outlineColor", "buttonType", "buttonName", "renderCloseButton", "closeButton", "renderContainer", "handleBackdropParam", "handlePositionParam", "handleGrowParam", "backdrop", "position", "grow", "privateProps", "inputClasses", "renderInput", "innerParams", "rerender", "inputContainer", "setAttributes", "showInput", "setCustomClass", "renderInputType", "getInputContainer", "removeAttributes", "attrName", "inputAttributes", "attr", "setInputPlaceholder", "setInputLabel", "prependTo", "label", "labelClass", "inputType", "checkAndSetInputValue", "inputValue", "rangeInput", "placeholder", "radio", "checkboxContainer", "getMargin", "initialPopupWidth", "textareaResizeHandler", "textareaWidth", "renderContent", "htmlContainer", "renderFooter", "footer", "renderIcon", "setContent", "applyStyles", "adjustSuccessIconBackgroundColor", "iconType", "iconClassName", "setColor", "popupBackgroundColor", "successIconParts", "successIconHtml", "errorIconHtml", "oldContent", "newContent", "iconContent", "sel", "content", "renderImage", "image", "dragging", "mousedownX", "mousedownY", "initialX", "initialY", "addDraggableListeners", "down", "move", "up", "removeDraggableListeners", "event", "clientXY", "getClientXY", "clientX", "clientY", "renderPopup", "addClasses$1", "showClass", "renderProgressSteps", "progressStepsContainer", "progressSteps", "currentProgressStep", "step", "index", "stepEl", "createStepElement", "lineEl", "createLineElement", "renderTitle", "title", "render", "isVisible", "clickConfirm", "_dom$getConfirmButton", "clickDeny", "_dom$getDenyButton", "clickCancel", "_dom$getCancelButton", "DismissReason", "removeKeydownHandler", "addKeydownHandler", "dismissWith", "keydownHandler", "setFocus", "increment", "_dom$getPopup", "focusableElements", "arrowKeysNextButton", "arrowKeysPreviousButton", "handleEnter", "handleTab", "handleArrows", "handleEsc", "btnIndex", "key", "buttons", "sibling", "buttonToFocus", "privateMethods", "setAriaHidden", "unsetAriaHidden", "isSafariOrIOS", "iOSfix", "offset", "lockBodyScroll", "preventTouchMove", "shouldPreventTouchMove", "isStylus", "isZoom", "undoIOSfix", "measureScrollbar", "scrollDiv", "scrollbarWidth", "previousBodyPadding", "replaceScrollbarWithPadding", "initialBodyOverflow", "undoReplaceScrollbarWithPadding", "removePopupAndResetState", "didClose", "triggerDidCloseAndDispose", "removeBodyClasses", "close", "resolveValue", "prepareResolveValue", "swalPromiseResolve", "triggerClosePopup", "handleAwaitingPromise", "handlePopupAnimation", "rejectPromise", "_globalState$eventEmi", "animationIsSupported", "animatePopup", "swalCloseAnimationFinished", "_globalState$swalClos", "_globalState$eventEmi2", "showLoading", "buttonToReplace", "Swal", "replaceButton", "handleInputOptionsAndValue", "handleInputOptions", "handleInputValue", "getInputValue", "getCheckboxValue", "getRadioValue", "getFileValue", "processInputOptions", "inputOptions", "populateSelectOptions", "formatInputOptions", "populateRadioOptions", "err", "renderOption", "optionLabel", "optionValue", "option", "isSelected", "inputOption", "optgroup", "o", "radioValue", "radioLabel", "radioInput", "radioLabelElement", "radios", "result", "valueFormatted", "handleConfirmButtonClick", "handleConfirmOrDenyWithInput", "confirm", "handleDenyButtonClick", "deny", "handleCancelButtonClick", "type", "handleInputValidator", "validationMessage", "preDenyValue", "rejectWith", "succeedWith", "preConfirmValue", "hideLoading", "domCache", "showRelatedButton", "getInput", "setButtonsDisabled", "disabled", "setInputDisabled", "enableButtons", "disableButtons", "enableInput", "disableInput", "showValidationMessage", "resetValidationMessage", "defaultParams", "updatableParams", "deprecatedParams", "toastIncompatibleParams", "isValidParameter", "paramName", "isUpdatableParameter", "isDeprecatedParameter", "checkIfParamIsValid", "checkIfToastParamIsValid", "checkIfParamIsDeprecated", "isDeprecated", "showWarningsForParams", "update", "validUpdatableParams", "filterValidParams", "updatedParams", "_destroy", "disposeWeakMaps", "disposeSwal", "unsetWeakMaps", "obj", "instanceMethods", "handlePopupClick", "handleToastClick", "handleModalMousedown", "handleContainerMousedown", "handleModalClick", "isAnyButtonShown", "ignoreOutsideClick", "isJqueryElement", "isElement", "argsToParams", "args", "name", "fire", "mixin", "mixinParams", "MixinSwal", "priorityMixinParams", "getTimerLeft", "stopTimer", "resumeTimer", "remaining", "toggleTimer", "increaseTimer", "ms", "isTimerRunning", "bodyClickListenerAdded", "clickHandlers", "bindClickHandler", "bodyClickListener", "template", "EventEmitter", "eventName", "eventHandler", "currentHandlers", "onceFn", "staticMethods", "Timer", "callback", "delay", "running", "swalStringParams", "getTemplateParams", "templateContent", "showWarningsForElements", "getSwalParams", "getSwalFunctionParams", "getSwalButtons", "getSwalImage", "getSwalIcon", "getSwalInput", "getSwalStringParams", "showWarningsForAttributes", "optionName", "paramNames", "tag", "allowedElements", "tagName", "allowedAttributes", "attribute", "SHOW_CLASS_TIMEOUT", "openPopup", "addClasses", "setScrollingVisibility", "fixScrollContainer", "swalOpenAnimationFinished", "scrollbarPadding", "defaultInputValidators", "string", "setDefaultInputValidators", "validateCustomTargetElement", "setParameters", "currentInstance", "_promise", "SweetAlert", "outerParams", "userParams", "isAwaitingPromise", "prepareParams", "populateDomCache", "swalPromise", "onFulfilled", "onFinally", "reject", "dismiss", "setupTimer", "initFocus", "templateParams", "blurActiveElement", "focusAutofocus", "focusButton", "autofocusElements", "autofocusElement", "min", "max", "round", "floor", "createCoords", "v", "oppositeSideMap", "oppositeAlignmentMap", "clamp", "start", "value", "end", "evaluate", "param", "getSide", "placement", "getAlignment", "getOppositeAxis", "axis", "getAxisLength", "getSideAxis", "getAlignmentAxis", "getAlignmentSides", "rects", "rtl", "alignment", "alignmentAxis", "length", "mainAlignmentSide", "getOppositePlacement", "getExpandedPlacements", "oppositePlacement", "getOppositeAlignmentPlacement", "getSideList", "side", "isStart", "lr", "rl", "tb", "bt", "getOppositeAxisPlacements", "flipAlignment", "direction", "list", "expandPaddingObject", "padding", "getPaddingObject", "rectToClientRect", "rect", "computeCoordsFromPlacement", "_ref", "reference", "floating", "sideAxis", "alignLength", "isVertical", "commonX", "commonY", "commonAlign", "coords", "computePosition", "config", "strategy", "middleware", "platform2", "validMiddleware", "x", "y", "statefulPlacement", "middlewareData", "resetCount", "i", "name", "fn", "nextX", "nextY", "data", "reset", "detectOverflow", "state", "options", "_await$platform$isEle", "elements", "boundary", "rootBoundary", "elementContext", "altBoundary", "paddingObject", "element", "clippingClientRect", "offsetParent", "offsetScale", "elementClientRect", "flip", "_middlewareData$arrow", "_middlewareData$flip", "initialPlacement", "checkMainAxis", "checkCrossAxis", "specifiedFallbackPlacements", "fallbackStrategy", "fallbackAxisSideDirection", "detectOverflowOptions", "isBasePlacement", "fallbackPlacements", "placements2", "overflow", "overflows", "overflowsData", "sides2", "side2", "_middlewareData$flip2", "_overflowsData$filter", "nextIndex", "nextPlacement", "resetPlacement", "d", "a", "b", "_overflowsData$map$so", "placement2", "overflow2", "acc", "convertValueToCoords", "mainAxisMulti", "crossAxisMulti", "rawValue", "mainAxis", "crossAxis", "offset", "diffCoords", "shift", "limiter", "x2", "y2", "mainAxisCoord", "crossAxisCoord", "minSide", "maxSide", "min2", "max2", "limitedCoords", "getNodeName", "node", "isNode", "getWindow", "_node$ownerDocument", "getDocumentElement", "isElement", "isHTMLElement", "isShadowRoot", "isOverflowElement", "overflowX", "overflowY", "display", "getComputedStyle", "isTableElement", "isContainingBlock", "webkit", "isWebKit", "css", "getContainingBlock", "currentNode", "getParentNode", "isLastTraversableNode", "getNodeScroll", "result", "getNearestOverflowAncestor", "parentNode", "getOverflowAncestors", "traverseIframes", "_node$ownerDocument2", "scrollableAncestor", "isBody", "win", "getCssDimensions", "width", "height", "hasOffset", "offsetWidth", "offsetHeight", "shouldFallback", "unwrapElement", "getScale", "domElement", "$", "noOffsets", "getVisualOffsets", "shouldAddVisualOffsets", "isFixed", "floatingOffsetParent", "getBoundingClientRect", "includeScale", "isFixedStrategy", "clientRect", "scale", "visualOffsets", "offsetWin", "currentIFrame", "iframeScale", "iframeRect", "left", "top", "convertOffsetParentRelativeRectToViewportRelativeRect", "isOffsetParentAnElement", "documentElement", "scroll", "offsets", "offsetRect", "getClientRects", "getWindowScrollBarX", "getDocumentRect", "html", "body", "getViewportRect", "visualViewport", "visualViewportBased", "getInnerBoundingClientRect", "getClientRectFromClippingAncestor", "clippingAncestor", "hasFixedPositionAncestor", "stopNode", "getClippingElementAncestors", "cache", "cachedResult", "el", "currentContainingBlockComputedStyle", "elementIsFixed", "computedStyle", "currentNodeIsContaining", "ancestor", "getClippingRect", "clippingAncestors", "firstClippingAncestor", "clippingRect", "accRect", "getDimensions", "getRectRelativeToOffsetParent", "getTrueOffsetParent", "polyfill", "getOffsetParent", "window2", "getElementRects", "getOffsetParentFn", "getDimensionsFn", "isRTL", "platform", "observeMove", "onMove", "io", "timeoutId", "root", "cleanup", "refresh", "skip", "threshold", "insetTop", "insetRight", "insetBottom", "insetLeft", "isFirstUpdate", "handleObserve", "entries", "ratio", "autoUpdate", "update", "ancestorScroll", "ancestorResize", "elementResize", "layoutShift", "animationFrame", "referenceEl", "ancestors", "cleanupIo", "reobserveFrame", "resizeObserver", "firstEntry", "frameId", "prevRefRect", "frameLoop", "nextRefRect", "computePosition2", "mergedOptions", "platformWithCache", "src_default", "Alpine", "from", "to", "expression", "modifiers", "evaluate2", "offsetValue", "unstyled", "getOptions", "compute", "previousValue", "setStyles", "release", "idx", "module_default", "flushPending", "flushing", "queue", "lastFlushedIndex", "scheduler", "callback", "queueJob", "job", "queueFlush", "dequeueJob", "index", "flushJobs", "i", "reactive", "effect", "release", "raw", "shouldSchedule", "disableEffectScheduling", "setReactivityEngine", "engine", "task", "overrideEffect", "override", "elementBoundEffect", "el", "cleanup2", "effectReference", "watch", "getter", "firstTime", "oldValue", "value", "onAttributeAddeds", "onElRemoveds", "onElAddeds", "onElAdded", "onElRemoved", "onAttributesAdded", "onAttributeRemoved", "name", "cleanupAttributes", "names", "cleanupElement", "observer", "onMutate", "currentlyObserving", "startObservingMutations", "stopObservingMutations", "flushObserver", "queuedMutations", "records", "queueLengthWhenTriggered", "mutateDom", "result", "isCollecting", "deferredMutations", "deferMutations", "flushAndStopDeferringMutations", "mutations", "addedNodes", "removedNodes", "addedAttributes", "removedAttributes", "node", "add2", "remove", "attrs", "scope", "mergeProxies", "closestDataStack", "addScopeToNode", "data2", "referenceNode", "objects", "mergeProxyTrap", "obj", "thisProxy", "collapseProxies", "target", "descriptor", "acc", "key", "initInterceptors", "isObject2", "val", "recurse", "basePath", "enumerable", "path", "interceptor", "mutateObj", "get", "set", "initialValue", "initialize", "innerValue", "carry", "segment", "magics", "magic", "injectMagics", "memoizedUtilities", "getUtilities", "utilities", "getElementBoundUtilities", "utils", "tryCatch", "expression", "args", "e", "handleError", "error2", "shouldAutoEvaluateFunctions", "dontAutoEvaluateFunctions", "cache", "evaluate", "extras", "evaluateLater", "theEvaluatorFunction", "normalEvaluator", "setEvaluator", "newEvaluator", "overriddenMagics", "dataStack", "evaluator", "generateEvaluatorFromFunction", "generateEvaluatorFromString", "func", "receiver", "scope2", "params", "context", "runIfTypeOfFunction", "evaluatorMemo", "generateFunctionFromString", "AsyncFunction", "rightSideSafeExpression", "func2", "completeScope", "promise", "prefixAsString", "prefix", "subject", "setPrefix", "newPrefix", "directiveHandlers", "directive", "directive2", "pos", "directiveOrder", "directiveExists", "directives", "attributes", "originalAttributeOverride", "vAttributes", "staticAttributes", "attributesOnly", "attribute", "attr", "transformedAttributeMap", "toTransformedAttributes", "newName", "oldName", "outNonAlpineAttributes", "toParsedDirectives", "byPriority", "getDirectiveHandler", "isDeferringHandlers", "directiveHandlerStacks", "currentHandlerStackKey", "deferHandlingDirectives", "flushHandlers", "stopDeferring", "cleanups", "effect3", "cleanupEffect", "alpine_default", "noop", "handler4", "fullHandler", "startingWith", "replacement", "into", "newValue", "attributeTransformers", "transform", "mapAttributes", "alpineAttributeRegex", "typeMatch", "valueMatch", "modifiers", "original", "DEFAULT", "a", "b", "typeA", "typeB", "dispatch", "detail", "walk", "el2", "skip", "warn", "message", "started", "start", "initTree", "destroyTree", "handle", "outNestedComponents", "closestRoot", "allSelectors", "warnAboutMissingPlugins", "rootSelectorCallbacks", "initSelectorCallbacks", "rootSelectors", "fn", "addRootSelector", "selectorCallback", "addInitSelector", "includeInitSelectors", "findClosest", "element", "selector", "isRoot", "initInterceptors2", "interceptInit", "markerDispenser", "walker", "intercept", "root", "plugin2", "selectors", "tickStack", "isHolding", "nextTick", "releaseNextTicks", "res", "holdNextTicks", "setClasses", "setClassesFromString", "setClassesFromObject", "classString", "split", "classString2", "missingClasses", "addClassesAndReturnUndo", "classes", "classObject", "forAdd", "bool", "forRemove", "added", "removed", "setStyles", "setStylesFromObject", "setStylesFromString", "previousStyles", "value2", "kebabCase", "once", "fallback", "called", "evaluate2", "registerTransitionsFromHelper", "registerTransitionsFromClassString", "stage", "registerTransitionObject", "doesntSpecify", "transitioningIn", "transitioningOut", "wantsAll", "wantsOpacity", "wantsScale", "opacityValue", "scaleValue", "modifierValue", "delay", "origin", "property", "durationIn", "durationOut", "easing", "setFunction", "defaultValue", "before", "after", "transition", "show", "hide", "nextTick2", "clickAwayCompatibleShow", "resolve", "reject", "closest", "closestHide", "hideAfterChildren", "parent", "during", "start2", "end", "undoStart", "undoDuring", "undoEnd", "performTransition", "stages", "interrupted", "reachedBefore", "reachedEnd", "finish", "duration", "rawValue", "match", "isCloning", "skipDuringClone", "onlyDuringClone", "interceptors", "interceptClone", "cloneNode", "from", "to", "dontRegisterReactiveSideEffects", "isCloningLegacy", "clone", "oldEl", "newEl", "cloneTree", "hasRunThroughFirstEl", "el3", "callback2", "storedEffect", "bind", "camelCase", "bindInputValue", "bindStyles", "bindClasses", "bindAttributeAndProperty", "bindAttribute", "isRadio", "safeParseBoolean", "checkedAttrLooseCompare", "isCheckbox", "updateSelect", "setPropertyIfChanged", "attributeShouldntBePreservedIfFalsy", "isBooleanAttr", "setIfChanged", "attrName", "propName", "arrayWrappedValue", "option", "char", "valueA", "valueB", "booleanAttributes", "getBinding", "getAttributeBinding", "extractProp", "extract", "binding", "debounce", "wait", "timeout", "later", "throttle", "limit", "inThrottle", "entangle", "outerGet", "outerSet", "innerGet", "innerSet", "firstRun", "outerHash", "innerHash", "reference", "outer", "inner", "cloneIfObject", "outerHashLatest", "innerHashLatest", "plugin", "stores", "isReactive", "store", "getStores", "binds", "bind2", "bindings", "getBindings", "applyBindingsObject", "injectBindingProviders", "cleanupRunners", "datas", "data", "injectDataProviders", "Alpine", "makeMap", "str", "expectsLowerCase", "map", "list", "specialBooleanAttrs", "isBooleanAttr2", "EMPTY_OBJ", "EMPTY_ARR", "hasOwnProperty", "hasOwn", "isArray", "isMap", "toTypeString", "isString", "isSymbol", "isObject", "objectToString", "toRawType", "isIntegerKey", "cacheStringFunction", "camelizeRE", "camelize", "_", "c", "hyphenateRE", "hyphenate", "capitalize", "toHandlerKey", "hasChanged", "targetMap", "effectStack", "activeEffect", "ITERATE_KEY", "MAP_KEY_ITERATE_KEY", "isEffect", "effect2", "options", "createReactiveEffect", "stop", "cleanup", "uid", "enableTracking", "resetTracking", "deps", "shouldTrack", "trackStack", "pauseTracking", "last", "track", "type", "depsMap", "dep", "trigger", "oldTarget", "effects", "effectsToAdd", "key2", "run", "isNonTrackableKeys", "builtInSymbols", "get2", "createGetter", "readonlyGet", "arrayInstrumentations", "createArrayInstrumentations", "instrumentations", "arr", "toRaw", "l", "isReadonly", "shallow", "shallowReadonlyMap", "readonlyMap", "shallowReactiveMap", "reactiveMap", "targetIsArray", "isRef", "readonly", "reactive2", "set2", "createSetter", "hadKey", "deleteProperty", "has", "ownKeys", "mutableHandlers", "readonlyHandlers", "toReactive", "toReadonly", "toShallow", "getProto", "v", "get$1", "isShallow", "rawTarget", "rawKey", "has2", "wrap", "has$1", "size", "add", "set$1", "get3", "checkIdentityKeys", "deleteEntry", "clear", "hadItems", "createForEach", "thisArg", "observed", "createIterableMethod", "method", "targetIsMap", "isPair", "isKeyOnly", "innerIterator", "done", "createReadonlyMethod", "createInstrumentations", "mutableInstrumentations2", "shallowInstrumentations2", "readonlyInstrumentations2", "shallowReadonlyInstrumentations2", "mutableInstrumentations", "readonlyInstrumentations", "shallowInstrumentations", "shallowReadonlyInstrumentations", "createInstrumentationGetter", "mutableCollectionHandlers", "readonlyCollectionHandlers", "targetTypeMap", "rawType", "getTargetType", "createReactiveObject", "baseHandlers", "collectionHandlers", "proxyMap", "existingProxy", "targetType", "proxy", "r", "evaluateLater2", "unwatch", "getArrayOfRefObject", "refObjects", "globalIdMemo", "findAndIncrementId", "closestIdRoot", "setIdRoot", "cacheKey", "cacheIdByNameOnElement", "id", "output", "warnMissingPluginMagic", "magicName", "slug", "evaluateInnerSet", "releaseEntanglement", "getTarget", "clone2", "eventName", "placeInDom", "clone3", "target2", "modifiers2", "teleportContainerDuringClone", "handler", "on", "event", "listenerTarget", "wrapHandler", "wrapper", "dotSyntax", "camelCase2", "nextModifier", "isNumeric", "next", "isKeyEvent", "isClickEvent", "isListeningForASpecificKeyThatHasntBeenPressed", "kebabCase2", "keyModifiers", "debounceIndex", "keyToModifiers", "selectedSystemKeyModifiers", "modifier", "modifierToKeyMap", "scopeTarget", "evaluateGet", "evaluateSet", "getValue", "isGetterSetter", "setValue", "removeListener", "getInputValue", "removeResetListener", "currentValue", "safeParseNumber", "checkedAttrLooseCompare2", "number", "isNumeric2", "handler2", "bindingProviders", "storeKeyForXFor", "shouldSkipRegisteringDataDuringClone", "magicContext", "dataProviderContext", "reactiveData", "undo", "toggle", "iteratorNames", "parseForExpression", "evaluateItems", "evaluateKey", "loop", "templateEl", "items", "isNumeric3", "lookup", "prevKeys", "scopes", "keys", "getIterationScopeVariables", "adds", "moves", "removes", "sames", "lastKey", "prevIndex", "keyInSpot", "keyForSpot", "elInSpot", "elForSpot", "marker", "lastKey2", "lastEl", "reactiveScope", "newScope", "forIteratorRE", "stripParensRE", "forAliasRE", "inMatch", "item", "iteratorMatch", "scopeVariables", "handler3", "warnMissingPluginDirective", "directiveName", "src_default", "module_default", "import_sweetalert2", "bulkAddTimeEntries", "projectChoices", "row", "idx", "inputs", "selects", "elem", "prevNameParts", "prevName", "totalForms", "tmpl", "node", "round", "v", "lim", "l", "h", "p2b", "n2b", "v", "lim", "round", "b2n", "n2p", "map$1", "hex", "h1", "b", "h2", "eq", "isShort", "hexParse", "str", "len", "ret", "alpha", "a", "f", "hexString", "HUE_RE", "hsl2rgbn", "h", "s", "l", "n", "k", "hsv2rgbn", "hwb2rgbn", "w", "rgb", "i", "hueValue", "r", "g", "d", "max", "rgb2hsl", "min", "calln", "c", "hsl2rgb", "hwb2rgb", "hsv2rgb", "hue", "hueParse", "m", "p2b", "p1", "p2", "rotate", "deg", "hslString", "map", "names$1", "unpack", "unpacked", "keys", "tkeys", "j", "ok", "nk", "names", "nameParse", "RGB_RE", "rgbParse", "rgbString", "to", "from", "interpolate", "rgb1", "rgb2", "modHSL", "ratio", "tmp", "clone", "proto", "fromObject", "input", "functionParse", "Color", "_Color", "type", "obj", "color", "weight", "c1", "c2", "w2", "p", "w1", "val", "noop", "uid", "id", "isNullOrUndef", "value", "isArray", "Array", "type", "Object", "prototype", "toString", "call", "slice", "isObject", "isNumberFinite", "Number", "isFinite", "finiteOrDefault", "defaultValue", "valueOrDefault", "toPercentage", "dimension", "endsWith", "parseFloat", "toDimension", "callback", "fn", "args", "thisArg", "apply", "each", "loopable", "reverse", "i", "len", "keys", "length", "_elementsEqual", "a0", "a1", "ilen", "v0", "v1", "datasetIndex", "index", "clone", "source", "map", "target", "create", "klen", "k", "isValidKey", "key", "indexOf", "_merger", "options", "tval", "sval", "merge", "sources", "merger", "current", "mergeIf", "_mergerIf", "hasOwnProperty", "keyResolvers", "v", "x", "o", "y", "_splitKey", "key", "parts", "split", "keys", "tmp", "part", "endsWith", "slice", "push", "_getKeyResolver", "obj", "k", "resolveObjectKey", "_capitalize", "str", "charAt", "toUpperCase", "defined", "value", "isFunction", "setsEqual", "a", "b", "size", "item", "has", "_isClickEvent", "e", "type", "PI", "Math", "TAU", "PITAU", "INFINITY", "Number", "POSITIVE_INFINITY", "RAD_PER_DEG", "HALF_PI", "QUARTER_PI", "TWO_THIRDS_PI", "log10", "sign", "almostEquals", "epsilon", "abs", "niceNum", "range", "roundedRange", "round", "niceRange", "pow", "floor", "fraction", "_factorize", "result", "sqrt", "i", "sort", "pop", "isNonPrimitive", "n", "Symbol", "toPrimitive", "isNumber", "isNaN", "parseFloat", "isFinite", "almostWhole", "rounded", "_setMinAndMaxByKey", "array", "target", "property", "ilen", "length", "min", "max", "toRadians", "degrees", "toDegrees", "radians", "_decimalPlaces", "isFiniteNumber", "p", "getAngleFromPoint", "centrePoint", "anglePoint", "distanceFromXCenter", "distanceFromYCenter", "radialDistanceFromCenter", "angle", "atan2", "distance", "distanceBetweenPoints", "pt1", "pt2", "_angleDiff", "_normalizeAngle", "_angleBetween", "start", "end", "sameAngleIsFullCircle", "s", "angleToStart", "angleToEnd", "startToAngle", "endToAngle", "_limitValue", "_int16Range", "_isBetween", "_lookup", "table", "cmp", "index", "hi", "lo", "mid", "_lookupByKey", "last", "ti", "_rlookupByKey", "_filterBetween", "values", "arrayEvents", "listenArrayEvents", "listener", "_chartjs", "listeners", "Object", "defineProperty", "configurable", "enumerable", "forEach", "method", "base", "args", "res", "apply", "object", "unlistenArrayEvents", "stub", "indexOf", "splice", "_arrayUnique", "items", "set", "Set", "Array", "from", "requestAnimFrame", "window", "callback", "requestAnimationFrame", "throttled", "fn", "thisArg", "argsToUse", "ticking", "args", "call", "apply", "debounce", "delay", "timeout", "clearTimeout", "setTimeout", "_toLeftRightCenter", "align", "_alignStartEnd", "start", "end", "_textX", "left", "right", "rtl", "_getStartAndCountOfVisiblePoints", "meta", "points", "animationsDisabled", "pointCount", "length", "count", "_sorted", "iScale", "vScale", "_parsed", "spanGaps", "dataset", "options", "axis", "min", "max", "minDefined", "maxDefined", "getUserBounds", "Math", "_lookupByKey", "lo", "getPixelForValue", "distanceToDefinedLo", "slice", "reverse", "findIndex", "point", "isNullOrUndef", "_limitValue", "hi", "distanceToDefinedHi", "_scaleRangesChanged", "xScale", "yScale", "_scaleRanges", "newRanges", "xmin", "xmax", "ymin", "ymax", "changed", "Object", "assign", "atEdge", "t", "elasticIn", "s", "p", "pow", "sin", "TAU", "elasticOut", "effects", "linear", "easeInQuad", "easeOutQuad", "easeInOutQuad", "easeInCubic", "easeOutCubic", "easeInOutCubic", "easeInQuart", "easeOutQuart", "easeInOutQuart", "easeInQuint", "easeOutQuint", "easeInOutQuint", "easeInSine", "cos", "HALF_PI", "easeOutSine", "easeInOutSine", "PI", "easeInExpo", "easeOutExpo", "easeInOutExpo", "easeInCirc", "sqrt", "easeOutCirc", "easeInOutCirc", "easeInElastic", "easeOutElastic", "easeInOutElastic", "easeInBack", "easeOutBack", "easeInOutBack", "easeInBounce", "easeOutBounce", "d", "m", "easeInOutBounce", "isPatternOrGradient", "value", "type", "toString", "color", "Color", "getHoverColor", "saturate", "darken", "hexString", "numbers", "colors", "applyAnimationsDefaults", "defaults", "set", "undefined", "duration", "easing", "from", "loop", "to", "describe", "_fallback", "_indexable", "_scriptable", "name", "properties", "active", "animation", "resize", "show", "animations", "visible", "hide", "v", "applyLayoutsDefaults", "autoPadding", "padding", "top", "bottom", "intlCache", "Map", "getNumberFormat", "locale", "cacheKey", "JSON", "stringify", "formatter", "get", "Intl", "NumberFormat", "formatNumber", "num", "format", "formatters", "values", "isArray", "numeric", "tickValue", "index", "ticks", "chart", "notation", "delta", "maxTick", "abs", "calculateDelta", "logDelta", "log10", "numDecimal", "isNaN", "floor", "minimumFractionDigits", "maximumFractionDigits", "logarithmic", "remain", "significand", "includes", "Ticks", "applyScaleDefaults", "display", "offset", "beginAtZero", "bounds", "clip", "grace", "grid", "lineWidth", "drawOnChartArea", "drawTicks", "tickLength", "tickWidth", "_ctx", "tickColor", "border", "dash", "dashOffset", "width", "title", "text", "minRotation", "maxRotation", "mirror", "textStrokeWidth", "textStrokeColor", "autoSkip", "autoSkipPadding", "labelOffset", "minor", "major", "crossAlign", "showLabelBackdrop", "backdropColor", "backdropPadding", "route", "startsWith", "overrides", "create", "descriptors", "getScope", "node", "key", "keys", "split", "i", "n", "k", "root", "scope", "merge", "Defaults", "constructor", "_descriptors", "_appliers", "backgroundColor", "borderColor", "datasets", "devicePixelRatio", "context", "platform", "getDevicePixelRatio", "elements", "events", "font", "family", "size", "style", "lineHeight", "weight", "hover", "hoverBackgroundColor", "ctx", "hoverBorderColor", "hoverColor", "indexAxis", "interaction", "mode", "intersect", "includeInvisible", "maintainAspectRatio", "onHover", "onClick", "parsing", "plugins", "responsive", "scale", "scales", "showLine", "drawActiveElementsOnTop", "override", "targetScope", "targetName", "scopeObject", "targetScopeObject", "privateName", "defineProperties", "writable", "enumerable", "local", "target", "isObject", "valueOrDefault", "appliers", "forEach", "toFontString", "_measureText", "data", "gc", "longest", "string", "textWidth", "measureText", "push", "_longestText", "arrayOfThings", "cache", "garbageCollect", "save", "ilen", "j", "jlen", "thing", "nestedThing", "restore", "gcLen", "splice", "_alignPixel", "pixel", "currentDevicePixelRatio", "halfWidth", "round", "clearCanvas", "canvas", "getContext", "resetTransform", "clearRect", "height", "drawPoint", "x", "y", "drawPointLegend", "w", "xOffset", "yOffset", "cornerRadius", "xOffsetW", "yOffsetW", "pointStyle", "rotation", "radius", "rad", "RAD_PER_DEG", "translate", "rotate", "drawImage", "beginPath", "ellipse", "arc", "closePath", "moveTo", "TWO_THIRDS_PI", "lineTo", "QUARTER_PI", "SQRT1_2", "rect", "fill", "borderWidth", "stroke", "_isPointInArea", "area", "margin", "clipArea", "unclipArea", "_steppedLineTo", "previous", "flip", "midpoint", "_bezierCurveTo", "bezierCurveTo", "cp1x", "cp2x", "cp1y", "cp2y", "setRenderOpts", "opts", "translation", "fillStyle", "textAlign", "textBaseline", "decorateText", "line", "strikethrough", "underline", "metrics", "actualBoundingBoxLeft", "actualBoundingBoxRight", "actualBoundingBoxAscent", "actualBoundingBoxDescent", "yDecoration", "strokeStyle", "decorationWidth", "drawBackdrop", "oldColor", "fillRect", "renderText", "lines", "strokeWidth", "strokeColor", "backdrop", "strokeText", "maxWidth", "fillText", "Number", "addRoundedRectPath", "h", "topLeft", "bottomLeft", "bottomRight", "topRight", "LINE_HEIGHT", "FONT_STYLE", "toLineHeight", "matches", "match", "numberOrZero", "_readValueToProps", "props", "ret", "objProps", "read", "prop", "toTRBL", "toTRBLCorners", "toPadding", "obj", "toFont", "fallback", "parseInt", "console", "warn", "resolve", "inputs", "info", "cacheable", "_addGrace", "minmax", "change", "toDimension", "keepZero", "add", "createContext", "parentContext", "_createResolver", "scopes", "prefixes", "rootScopes", "getTarget", "finalRootScopes", "_resolve", "Symbol", "toStringTag", "_cacheable", "_scopes", "_rootScopes", "_getTarget", "Proxy", "deleteProperty", "_keys", "_cached", "_resolveWithPrefixes", "getOwnPropertyDescriptor", "Reflect", "getPrototypeOf", "has", "getKeysFromAllScopes", "ownKeys", "storage", "_storage", "_attachContext", "proxy", "subProxy", "descriptorDefaults", "_proxy", "_context", "_subProxy", "_stack", "Set", "setContext", "receiver", "_resolveWithContext", "allKeys", "configurable", "scriptable", "indexable", "_allKeys", "isScriptable", "isFunction", "isIndexable", "readKey", "prefix", "_capitalize", "needsSubResolver", "prototype", "hasOwnProperty", "_resolveScriptable", "_resolveArray", "getValue", "Error", "Array", "join", "delete", "createSubResolver", "arr", "filter", "item", "resolver", "resolveFallback", "parent", "resolveObjectKey", "addScopes", "parentScopes", "parentFallback", "allScopes", "addScopesFromKey", "subGetTarget", "resolveKeysFromAllScopes", "_parseObjectDataRadialScale", "_parsing", "parsed", "r", "parse", "EPSILON", "getPoint", "skip", "getValueAxis", "splineCurve", "firstPoint", "middlePoint", "afterPoint", "current", "next", "d01", "distanceBetweenPoints", "d12", "s01", "s12", "fa", "fb", "monotoneAdjust", "deltaK", "mK", "pointsLen", "alphaK", "betaK", "tauK", "squaredMagnitude", "pointCurrent", "pointAfter", "almostEquals", "monotoneCompute", "valueAxis", "pointBefore", "iPixel", "vPixel", "splineCurveMonotone", "slopeDelta", "sign", "capControlPoint", "pt", "capBezierPoints", "inArea", "inAreaPrev", "inAreaNext", "_updateBezierControlPoints", "controlPoints", "cubicInterpolationMode", "prev", "tension", "_isDomSupported", "document", "_getParentNode", "domNode", "parentNode", "host", "parseMaxStyle", "styleValue", "parentProperty", "valueInPixels", "indexOf", "getComputedStyle", "element", "ownerDocument", "defaultView", "getStyle", "el", "property", "getPropertyValue", "positions", "getPositionedStyle", "styles", "suffix", "result", "pos", "parseFloat", "useOffsetPos", "shadowRoot", "getCanvasPosition", "e", "touches", "source", "offsetX", "offsetY", "box", "getBoundingClientRect", "clientX", "clientY", "getRelativePosition", "event", "borderBox", "boxSizing", "paddings", "borders", "getContainerSize", "maxHeight", "container", "clientWidth", "clientHeight", "containerStyle", "containerBorder", "containerPadding", "INFINITY", "round1", "getMaximumSize", "bbWidth", "bbHeight", "aspectRatio", "margins", "containerSize", "retinaScale", "forceRatio", "forceStyle", "pixelRatio", "deviceHeight", "deviceWidth", "setTransform", "supportsEventListenerOptions", "passiveSupported", "passive", "addEventListener", "removeEventListener", "readUsedSize", "_pointInLine", "p1", "p2", "_steppedInterpolation", "_bezierInterpolation", "cp1", "cp2", "a", "b", "c", "getRightToLeftAdapter", "rectX", "setWidth", "xPlus", "leftForLtr", "itemWidth", "getLeftToRightAdapter", "_itemWidth", "getRtlAdapter", "overrideTextDirection", "direction", "original", "getPropertyPriority", "setProperty", "prevTextDirection", "restoreTextDirection", "propertyFn", "between", "_angleBetween", "compare", "_angleDiff", "normalize", "_normalizeAngle", "_isBetween", "normalizeSegment", "getSegment", "segment", "startBound", "endBound", "_boundSegment", "inside", "subStart", "prevValue", "startIsBefore", "endIsBefore", "shouldStart", "shouldStop", "_boundSegments", "segments", "sub", "findStartAndEnd", "solidSegments", "last", "cur", "stop", "_computeSegments", "segmentOptions", "_loop", "splitByStyles", "completeLoop", "_fullLoop", "doSplitByStyles", "chartContext", "_chart", "baseStyle", "readStyle", "_datasetIndex", "datasetIndex", "prevStyle", "addStyle", "l", "st", "dir", "p0", "p0DataIndex", "p1DataIndex", "styleChanged", "borderCapStyle", "borderDash", "borderDashOffset", "borderJoinStyle", "replacer", "getSizeForArea", "chartArea", "field", "getDatasetArea", "getDatasetClipArea", "_clip", "disabled", "Animator", "constructor", "_request", "_charts", "Map", "_running", "_lastDate", "undefined", "_notify", "chart", "anims", "date", "type", "callbacks", "listeners", "numSteps", "duration", "forEach", "fn", "initial", "currentStep", "Math", "min", "start", "_refresh", "requestAnimFrame", "call", "window", "_update", "Date", "now", "remaining", "running", "items", "length", "i", "draw", "item", "_active", "_total", "tick", "pop", "_getAnims", "charts", "get", "complete", "progress", "set", "listen", "event", "cb", "push", "add", "has", "reduce", "acc", "cur", "max", "_duration", "stop", "cancel", "remove", "delete", "animator", "transparent", "interpolators", "boolean", "from", "to", "factor", "color", "c0", "helpersColor", "c1", "valid", "mix", "hexString", "number", "Animation", "cfg", "target", "prop", "currentValue", "resolve", "_fn", "_easing", "effects", "easing", "linear", "_start", "floor", "delay", "_loop", "loop", "_target", "_prop", "_from", "_to", "_promises", "active", "update", "elapsed", "remain", "wait", "promises", "Promise", "res", "rej", "resolved", "method", "Animations", "config", "_chart", "_properties", "configure", "isObject", "animationOptions", "Object", "keys", "defaults", "animation", "animatedProps", "getOwnPropertyNames", "key", "option", "isArray", "properties", "_animateOptions", "values", "newOptions", "options", "resolveTargetOptions", "animations", "_createAnimations", "$shared", "awaitAll", "$animations", "then", "props", "charAt", "value", "size", "assign", "anim", "all", "scaleClip", "scale", "allowedOverflow", "opts", "reverse", "end", "defaultClip", "xScale", "yScale", "x", "y", "top", "right", "bottom", "left", "toClip", "t", "r", "b", "l", "disabled", "getSortedDatasetIndices", "filterVisible", "metasets", "_getSortedDatasetMetas", "ilen", "index", "applyStack", "stack", "dsIndex", "singleMode", "mode", "datasetIndex", "otherValue", "found", "isFinite", "sign", "convertObjectDataToArray", "data", "meta", "iScale", "vScale", "iAxisKey", "axis", "vAxisKey", "adata", "Array", "isStacked", "stacked", "getStackKey", "indexScale", "valueScale", "id", "getUserBounds", "minDefined", "maxDefined", "Number", "NEGATIVE_INFINITY", "POSITIVE_INFINITY", "getOrCreateStack", "stacks", "stackKey", "indexValue", "subStack", "getLastIndexInStack", "positive", "getMatchingVisibleMetas", "updateStacks", "controller", "parsed", "_cachedMeta", "_stacks", "iAxis", "vAxis", "itemStacks", "_top", "_bottom", "visualValues", "_visualValues", "getFirstScaleId", "scales", "filter", "shift", "createDatasetContext", "parent", "createContext", "dataset", "createDataContext", "element", "dataIndex", "raw", "clearStacks", "_parsed", "isDirectUpdateMode", "cloneIfNotShared", "cached", "shared", "createStack", "canStack", "hidden", "_stacked", "DatasetController", "datasetElementType", "dataElementType", "_ctx", "ctx", "_cachedDataOpts", "getMeta", "_type", "_parsing", "_data", "_objectData", "_sharedOptions", "_drawStart", "_drawCount", "enableOptionSharing", "supportsDecimation", "$context", "_syncList", "initialize", "linkScales", "addElements", "fill", "isPluginEnabled", "console", "warn", "updateIndex", "getDataset", "chooseId", "xid", "xAxisID", "valueOrDefault", "yid", "yAxisID", "rid", "rAxisID", "indexAxis", "iid", "iAxisID", "vid", "vAxisID", "getScaleForId", "rScale", "datasets", "getDatasetMeta", "scaleID", "_getOtherScale", "reset", "_destroy", "unlistenArrayEvents", "_dataCheck", "isExtensible", "listenArrayEvents", "buildOrUpdateElements", "resetNewElements", "stackChanged", "oldStacked", "_resyncElements", "scopeKeys", "datasetScopeKeys", "scopes", "getOptionScopes", "createResolver", "getContext", "parsing", "parse", "count", "sorted", "_sorted", "prev", "parseArrayData", "parseObjectData", "parsePrimitiveData", "isNotInOrderComparedToPrev", "labels", "getLabels", "singleScale", "xAxisKey", "yAxisKey", "resolveObjectKey", "getParsed", "getDataElement", "updateRangeFromParsed", "range", "parsedValue", "NaN", "getMinMax", "otherScale", "otherMin", "otherMax", "_skip", "getAllParsedValues", "getMaxOverflow", "getLabelAndValue", "label", "getLabelForValue", "_clip", "clip", "elements", "area", "chartArea", "drawActiveElementsOnTop", "getStyle", "resolveDatasetElementOptions", "resolveDataElementOptions", "context", "_resolveElementOptions", "elementType", "cache", "cacheKey", "sharing", "defined", "datasetElementScopeKeys", "prefixes", "names", "resolveNamedOptions", "freeze", "_resolveAnimations", "transition", "datasetAnimationScopeKeys", "_cacheable", "getSharedOptions", "includeOptions", "sharedOptions", "_animationsDisabled", "_getSharedOptions", "firstOpts", "previouslySharedOptions", "updateSharedOptions", "updateElement", "_setStyle", "removeHoverStyle", "setHoverStyle", "_removeDatasetHoverStyle", "_setDatasetHoverStyle", "arg1", "arg2", "numMeta", "numData", "_insertElements", "_removeElements", "move", "arr", "updateElements", "removed", "splice", "_sync", "args", "_dataChanges", "_onDataPush", "arguments", "_onDataPop", "_onDataShift", "_onDataSplice", "newCount", "_onDataUnshift", "getAllScaleValues", "_cache", "$bar", "visibleMetas", "concat", "_arrayUnique", "sort", "a", "computeMinSampleSize", "_length", "curr", "updateMinAndPrev", "abs", "getPixelForValue", "ticks", "getPixelForTick", "computeFitCategoryTraits", "ruler", "stackCount", "thickness", "barThickness", "ratio", "isNullOrUndef", "categoryPercentage", "barPercentage", "chunk", "pixels", "computeFlexCategoryTraits", "next", "percent", "parseFloatBar", "entry", "startValue", "endValue", "barStart", "barEnd", "_custom", "parseValue", "parseArrayOrPrimitive", "isFloatBar", "custom", "barSign", "actualBase", "isHorizontal", "borderProps", "horizontal", "base", "setBorderSkipped", "edge", "borderSkipped", "enableBorderRadius", "parseEdge", "swap", "startEnd", "orig", "v1", "v2", "v", "setInflateAmount", "inflateAmount", "BarController", "grouped", "numbers", "overrides", "_index_", "offset", "grid", "_value_", "beginAtZero", "obj", "bars", "getBasePixel", "_getRuler", "vpixels", "head", "_calculateBarValuePixels", "ipixels", "_calculateBarIndexPixels", "center", "height", "width", "_getStacks", "last", "currentParsed", "iScaleValue", "skipNull", "find", "val", "isNaN", "indexOf", "_getStackCount", "_getAxisCount", "_getAxis", "getFirstScaleIdForIndexAxis", "indexScaleId", "firstScaleAxisId", "_getStackIndex", "name", "_startPixel", "_endPixel", "baseValue", "minBarLength", "floating", "getDataVisibility", "startPixel", "getPixelForDecimal", "endPixel", "getValueForPixel", "halfGrid", "getLineWidthForValue", "maxBarThickness", "Infinity", "axisCount", "axisID", "axisNumber", "stackIndex", "rects", "BubbleController", "radius", "points", "point", "iPixel", "vPixel", "skip", "getRatioAndOffset", "rotation", "circumference", "cutout", "ratioX", "ratioY", "offsetX", "offsetY", "TAU", "startAngle", "endAngle", "startX", "cos", "startY", "sin", "endX", "endY", "calcMax", "angle", "_angleBetween", "calcMin", "maxX", "maxY", "HALF_PI", "minX", "PI", "minY", "DoughnutController", "animateRotate", "animateScale", "spacing", "descriptors", "_scriptable", "_indexable", "startsWith", "aspectRatio", "plugins", "legend", "generateLabels", "pointStyle", "map", "style", "text", "fillStyle", "backgroundColor", "strokeStyle", "borderColor", "fontColor", "lineWidth", "borderWidth", "onClick", "e", "legendItem", "toggleDataVisibility", "innerRadius", "outerRadius", "getter", "_getRotation", "toRadians", "_getCircumference", "_getRotationExtents", "isDatasetVisible", "arcs", "getMaxBorderWidth", "getMaxOffset", "maxSize", "toPercentage", "chartWeight", "_getRingWeight", "maxWidth", "maxHeight", "maxRadius", "toDimension", "radiusLength", "_getVisibleDatasetWeightTotal", "total", "calculateTotal", "_getRingWeightOffset", "_circumference", "calculateCircumference", "animationOpts", "centerX", "centerY", "arc", "metaData", "formatNumber", "locale", "borderAlign", "hoverBorderWidth", "hoverOffset", "ringWeightOffset", "weight", "LineController", "showLine", "spanGaps", "line", "_dataset", "animationsDisabled", "_getStartAndCountOfVisiblePoints", "_scaleRangesChanged", "_datasetIndex", "_decimated", "segment", "animated", "maxGapLength", "isNumber", "directUpdate", "pointsCount", "prevParsed", "nullData", "border", "firstPoint", "lastPoint", "updateControlPoints", "PolarAreaController", "angleLines", "display", "circular", "pointLabels", "_parseObjectDataRadialScale", "bind", "_updateRadius", "minSize", "cutoutPercentage", "getVisibleDatasetCount", "xCenter", "yCenter", "datasetStartAngle", "getIndexAngle", "defaultAngle", "countVisibleElements", "_computeAngle", "getDistanceFromCenterForValue", "PieController", "RadarController", "_fullLoop", "pointPosition", "getPointPositionForValue", "ScatterController", "interaction", "registry", "getElement", "abstract", "Error", "DateAdapterBase", "override", "members", "prototype", "init", "formats", "format", "diff", "startOf", "endOf", "adapters", "_date", "binarySearch", "metaset", "intersect", "lookupMethod", "_reversePixels", "_rlookupByKey", "_lookupByKey", "el", "getRange", "lo", "hi", "result", "distanceToDefinedLo", "slice", "findIndex", "distanceToDefinedHi", "evaluateInteractionItems", "position", "handler", "getSortedVisibleDatasetMetas", "j", "getDistanceMetricForAxis", "useX", "useY", "pt1", "pt2", "deltaX", "deltaY", "sqrt", "pow", "getIntersectItems", "useFinalPosition", "includeInvisible", "isPointInArea", "_isPointInArea", "inRange", "getNearestRadialItems", "evaluationFunc", "getProps", "getAngleFromPoint", "getNearestCartesianItems", "distanceMetric", "minDistance", "getCenterPoint", "distance", "getNearestItems", "getAxisItems", "rangeMethod", "intersectsItem", "Interaction", "modes", "getRelativePosition", "nearest", "STATIC_POSITIONS", "filterByPosition", "array", "pos", "filterDynamicPositionByAxis", "box", "sortByWeight", "v0", "wrapBoxes", "boxes", "layoutBoxes", "stackWeight", "buildStacks", "layouts", "wrap", "includes", "_stack", "placed", "setLayoutDims", "params", "vBoxMaxWidth", "hBoxMaxHeight", "layout", "fullSize", "availableWidth", "availableHeight", "buildLayoutBoxes", "centerHorizontal", "centerVertical", "leftAndTop", "rightAndBottom", "vertical", "getCombinedMax", "maxPadding", "updateMaxPadding", "boxPadding", "updateDims", "getPadding", "newWidth", "outerWidth", "newHeight", "outerHeight", "widthChanged", "w", "heightChanged", "h", "same", "other", "handleMaxPadding", "updatePos", "change", "getMargins", "marginForPositions", "positions", "margin", "fitBoxes", "refitBoxes", "refit", "changed", "setBoxDims", "placeBoxes", "userPadding", "padding", "addBox", "_layers", "z", "removeBox", "layoutItem", "minPadding", "toPadding", "verticalBoxes", "horizontalBoxes", "each", "beforeLayout", "visibleVerticalBoxCount", "BasePlatform", "acquireContext", "canvas", "releaseContext", "addEventListener", "listener", "removeEventListener", "getDevicePixelRatio", "getMaximumSize", "isAttached", "updateConfig", "BasicPlatform", "EXPANDO_KEY", "EVENT_TYPES", "touchstart", "touchmove", "touchend", "pointerenter", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointerout", "isNullOrEmpty", "initCanvas", "renderHeight", "getAttribute", "renderWidth", "boxSizing", "displayWidth", "readUsedSize", "displayHeight", "eventListenerOptions", "supportsEventListenerOptions", "passive", "addListener", "node", "removeListener", "fromNativeEvent", "native", "nodeListContains", "nodeList", "contains", "createAttachObserver", "observer", "MutationObserver", "entries", "trigger", "addedNodes", "removedNodes", "observe", "document", "childList", "subtree", "createDetachObserver", "drpListeningCharts", "oldDevicePixelRatio", "onWindowResize", "dpr", "devicePixelRatio", "resize", "currentDevicePixelRatio", "listenDevicePixelRatioChanges", "unlistenDevicePixelRatioChanges", "createResizeObserver", "container", "_getParentNode", "throttled", "clientWidth", "ResizeObserver", "contentRect", "releaseObserver", "disconnect", "createProxyAndListen", "proxy", "DomPlatform", "removeAttribute", "setAttribute", "proxies", "$proxies", "attach", "detach", "isConnected", "_detectPlatform", "_isDomSupported", "OffscreenCanvas", "Element", "defaultRoutes", "tooltipPosition", "hasValue", "final", "ret", "autoSkip", "tickOpts", "determinedMaxTicks", "determineMaxTicks", "ticksLimit", "maxTicksLimit", "majorIndices", "major", "enabled", "getMajorIndices", "numMajorIndices", "first", "newTicks", "skipMajors", "calculateSpacing", "avgMajorSpacing", "round", "tickLength", "_tickSize", "maxScale", "maxChart", "_maxLength", "evenMajorSpacing", "getEvenSpacing", "factors", "_factorize", "ceil", "majorStart", "majorEnd", "len", "reverseAlign", "align", "offsetFromEdge", "getTicksLimit", "ticksLength", "sample", "numItems", "increment", "getPixelForGridLine", "offsetGridLines", "validIndex", "epsilon", "lineValue", "garbageCollect", "caches", "gc", "gcLen", "getTickMarkLength", "drawTicks", "getTitleHeight", "fallback", "font", "toFont", "lineHeight", "createScaleContext", "createTickContext", "titleAlign", "_toLeftRightCenter", "titleArgs", "titleX", "titleY", "_alignStartEnd", "positionAxisID", "Scale", "_margins", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight", "labelRotation", "_range", "_gridLineItems", "_labelItems", "_labelSizes", "_longestTextCache", "_userMax", "_userMin", "_suggestedMax", "_suggestedMin", "_ticksLength", "_borderValue", "_dataLimitsCached", "setContext", "suggestedMin", "suggestedMax", "finiteOrDefault", "metas", "getTicks", "xLabels", "yLabels", "getLabelItems", "_computeLabelItems", "beforeUpdate", "margins", "grace", "sampleSize", "beforeSetDimensions", "setDimensions", "afterSetDimensions", "beforeDataLimits", "determineDataLimits", "afterDataLimits", "_addGrace", "beforeBuildTicks", "buildTicks", "afterBuildTicks", "samplingEnabled", "_convertTicksToLabels", "beforeCalculateLabelRotation", "calculateLabelRotation", "afterCalculateLabelRotation", "source", "afterAutoSkip", "beforeFit", "fit", "afterFit", "afterUpdate", "reversePixels", "_alignToPixels", "alignToPixels", "_callHooks", "notifyPlugins", "beforeTickToLabelConversion", "generateTickLabels", "callback", "afterTickToLabelConversion", "numTicks", "minRotation", "maxRotation", "tickWidth", "maxLabelDiagonal", "_isVisible", "labelSizes", "_getLabelSizes", "maxLabelWidth", "widest", "maxLabelHeight", "highest", "_limitValue", "title", "toDegrees", "asin", "titleOpts", "gridOpts", "titleHeight", "tickPadding", "angleRadians", "labelHeight", "mirror", "labelWidth", "_calculatePadding", "_handleMargins", "isRotated", "labelsBelowTicks", "offsetLeft", "offsetRight", "isFullSize", "_computeLabelSizes", "widths", "heights", "widestLabelSize", "highestLabelSize", "jlen", "tickFont", "fontString", "nestedLabel", "_resolveTickFontOptions", "string", "_measureText", "valueAt", "idx", "pixel", "decimal", "_int16Range", "_alignPixel", "getDecimalForPixel", "getBaseValue", "optionTicks", "rot", "autoSkipPadding", "_computeGridLineItems", "tl", "borderOpts", "axisWidth", "axisHalfWidth", "alignBorderValue", "borderValue", "alignedLineValue", "tx1", "ty1", "tx2", "ty2", "x1", "y1", "x2", "y2", "limit", "step", "optsAtIndex", "optsAtIndexBorder", "lineColor", "borderDash", "dash", "borderDashOffset", "dashOffset", "tickColor", "tickBorderDash", "tickBorderDashOffset", "crossAlign", "tickAndPadding", "hTickAndPadding", "textAlign", "lineCount", "textOffset", "textBaseline", "_getXAxisLabelAlignment", "_getYAxisLabelAlignment", "labelOffset", "halfCount", "strokeColor", "textStrokeColor", "strokeWidth", "textStrokeWidth", "tickTextAlign", "showLabelBackdrop", "backdrop", "labelPadding", "backdropPadding", "backdropColor", "translation", "_computeLabelArea", "drawBackground", "save", "fillRect", "restore", "drawGrid", "drawLine", "p1", "p2", "setLineDash", "lineDashOffset", "beginPath", "moveTo", "lineTo", "stroke", "drawOnChartArea", "drawBorder", "lastLineWidth", "drawLabels", "clipArea", "renderTextOptions", "renderText", "unclipArea", "drawTitle", "tz", "gz", "bz", "_maxDigits", "fontSize", "TypedRegistry", "scope", "create", "isForType", "isPrototypeOf", "register", "proto", "getPrototypeOf", "parentScope", "isIChartComponent", "registerDefaults", "unregister", "itemDefaults", "merge", "routeDefaults", "describe", "routes", "property", "propertyParts", "split", "sourceName", "sourceScope", "join", "parts", "targetName", "targetScope", "route", "Registry", "controllers", "_typedRegistries", "_each", "addControllers", "addPlugins", "addScales", "getController", "_get", "getPlugin", "getScale", "removeControllers", "removeElements", "removePlugins", "removeScales", "typedRegistry", "arg", "reg", "_getRegistryForType", "_exec", "itemReg", "component", "camelMethod", "_capitalize", "PluginService", "_init", "notify", "hook", "_createDescriptors", "_descriptors", "descriptor", "plugin", "callCallback", "cancelable", "invalidate", "_oldCache", "_notifyStateChanges", "allPlugins", "createDescriptors", "previousDescriptors", "some", "localIds", "local", "getOpts", "pluginOpts", "pluginScopeKeys", "scriptable", "indexable", "allKeys", "getIndexAxis", "datasetDefaults", "getAxisFromDefaultScaleID", "getDefaultScaleIDFromAxis", "idMatchesAxis", "axisFromPosition", "determineAxis", "scaleOptions", "toLowerCase", "getAxisFromDataset", "retrieveAxisFromDatasets", "boundDs", "d", "mergeScaleConfig", "chartDefaults", "configScales", "chartIndexAxis", "scaleConf", "error", "_proxy", "defaultId", "defaultScaleOptions", "mergeIf", "defaultID", "initOptions", "initData", "initConfig", "keyCache", "keysCached", "Set", "cachedKeys", "generate", "addIfFound", "Config", "_config", "_scopeCache", "_resolverCache", "platform", "clearCache", "clear", "datasetType", "additionalOptionScopes", "_cachedScopes", "mainScope", "resetCache", "keyLists", "chartOptionScopes", "resolver", "subPrefixes", "getResolver", "needContext", "isFunction", "subResolver", "_attachContext", "descriptorDefaults", "resolverCache", "_createResolver", "p", "hasFunction", "isScriptable", "isIndexable", "KNOWN_POSITIONS", "positionIsHorizontal", "compare2Level", "l1", "l2", "onAnimationsComplete", "onComplete", "onAnimationProgress", "onProgress", "getCanvas", "getElementById", "instances", "getChart", "c", "moveNumericKeys", "intKey", "determineLastEvent", "lastEvent", "inChartArea", "isClick", "Chart", "version", "invalidatePlugins", "userConfig", "initialCanvas", "existingChart", "uid", "_options", "_aspectRatio", "_metasets", "_lastEvent", "_listeners", "_responsiveListeners", "_sortedMetasets", "_plugins", "_hiddenIndices", "attached", "_doResize", "debounce", "resizeDelay", "_initialize", "maintainAspectRatio", "responsive", "retinaScale", "bindEvents", "clearCanvas", "_resizeBeforeDraw", "_resize", "newSize", "newRatio", "onResize", "render", "ensureScalesHaveIDs", "scalesOptions", "axisOptions", "buildOrUpdateScales", "scaleOpts", "updated", "isRadial", "dposition", "dtype", "scaleType", "scaleClass", "hasUpdated", "_updateMetasets", "_destroyDatasetMeta", "_removeUnreferencedMetasets", "buildOrUpdateControllers", "newControllers", "order", "visible", "ControllerClass", "_resetElements", "animsDisabled", "_updateScales", "_checkEventBindings", "_updateHiddenIndices", "_minPadding", "autoPadding", "_updateLayout", "_updateDatasets", "_eventHandler", "_updateHoverStyles", "existingEvents", "newEvents", "events", "setsEqual", "unbindEvents", "changes", "_getUniformDataChanges", "datasetCount", "makeSet", "changeSet", "noArea", "_idx", "_updateDataset", "layers", "_drawDatasets", "_drawDataset", "getDatasetClipArea", "getElementsAtEventForMode", "setDatasetVisibility", "_updateVisibility", "hide", "show", "_stop", "destroy", "toBase64Image", "toDataURL", "bindUserEvents", "bindResponsiveEvents", "_add", "_remove", "detached", "updateHoverStyle", "prefix", "getActiveElements", "setActiveElements", "activeElements", "lastActive", "_elementsEqual", "pluginId", "replay", "hoverOptions", "hover", "deactivated", "activated", "eventFilter", "_handleEvent", "_getActiveElements", "_isClickEvent", "onHover", "clipSelf", "borderJoinStyle", "outerAngleClip", "_normalizeAngle", "innerAngleClip", "clipWidth", "closePath", "rect", "clipArc", "pixelMargin", "angleMargin", "toRadiusCorners", "_readValueToProps", "parseBorderRadius", "angleDelta", "o", "borderRadius", "halfThickness", "innerLimit", "computeOuterLimit", "outerArcLimit", "outerStart", "outerEnd", "innerStart", "innerEnd", "rThetaToXY", "theta", "pathArc", "innerR", "spacingOffset", "alpha", "noSpacingInnerRadius", "noSpacingOuterRadius", "avNogSpacingRadius", "adjustedAngle", "beta", "angleOffset", "outerStartAdjustedRadius", "outerEndAdjustedRadius", "outerStartAdjustedAngle", "outerEndAdjustedAngle", "innerStartAdjustedRadius", "innerEndAdjustedRadius", "innerStartAdjustedAngle", "innerEndAdjustedAngle", "outerMidAdjustedAngle", "pCenter", "p4", "innerMidAdjustedAngle", "p8", "outerStartX", "outerStartY", "outerEndX", "outerEndY", "drawArc", "fullCircles", "inner", "lineJoin", "selfJoin", "ArcElement", "chartX", "chartY", "rAdjust", "nonZeroBetween", "betweenAngles", "withinRadius", "_isBetween", "halfAngle", "halfRadius", "translate", "fix", "radiusOffset", "setStyle", "lineCap", "borderCapStyle", "previous", "getLineMethod", "stepped", "_steppedLineTo", "tension", "cubicInterpolationMode", "_bezierCurveTo", "pathVars", "paramsStart", "paramsEnd", "segmentStart", "segmentEnd", "outside", "pathSegment", "lineMethod", "fastPathSegment", "avgX", "countX", "prevX", "lastY", "pointIndex", "drawX", "truncX", "_getSegmentMethod", "_getInterpolationMethod", "_steppedInterpolation", "_bezierInterpolation", "_pointInLine", "strokePathWithCache", "path", "_path", "Path2D", "strokePathDirect", "segments", "segmentMethod", "usePath2D", "LineElement", "capBezierPoints", "_points", "_segments", "_pointsUpdated", "_updateBezierControlPoints", "_computeSegments", "interpolate", "_boundSegments", "_interpolate", "interpolated", "hitRadius", "PointElement", "hoverRadius", "mouseX", "mouseY", "inXRange", "inYRange", "drawPoint", "getBarBounds", "bar", "half", "skipOrLimit", "parseBorderWidth", "maxW", "maxH", "toTRBL", "toTRBLCorners", "maxR", "enableBorder", "topLeft", "topRight", "bottomLeft", "bottomRight", "boundingRects", "bounds", "outer", "skipX", "skipY", "hasRadius", "addNormalRectPath", "inflateRect", "amount", "refRect", "BarElement", "addRectPath", "addRoundedRectPath", "BORDER_COLORS", "BACKGROUND_COLORS", "replace", "getBorderColor", "getBackgroundColor", "colorizeDefaultDataset", "colorizeDoughnutDataset", "colorizePolarAreaDataset", "getColorizer", "containsColorsDefinitions", "k", "containsColorsDefinition", "containsDefaultColorsDefenitions", "plugin_colors", "forceOverride", "_args", "chartOptions", "containsColorDefenition", "colorizer", "lttbDecimation", "samples", "decimated", "bucketWidth", "sampledIndex", "endIndex", "maxAreaPoint", "maxArea", "nextA", "avgY", "avgRangeStart", "avgRangeEnd", "avgRangeLength", "rangeOffs", "rangeTo", "pointAx", "pointAy", "minMaxDecimation", "minIndex", "maxIndex", "startIndex", "xMin", "dx", "lastIndex", "intermediateIndex1", "intermediateIndex2", "cleanDecimatedDataset", "defineProperty", "configurable", "enumerable", "writable", "cleanDecimatedData", "getStartAndCountOfVisiblePointsSimplified", "pointCount", "plugin_decimation", "algorithm", "beforeElementsUpdate", "xAxis", "threshold", "tpoints", "_findSegmentEnd", "_getBounds", "targetSegments", "tgt", "subBounds", "fillSources", "_boundSegment", "fillSource", "_getEdge", "_pointsFromSegments", "boundary", "linePoints", "_createBoundaryLine", "_shouldApplyFill", "_resolveTarget", "sources", "propagate", "visited", "_decodeFill", "parseFillOption", "parseFloat", "decodeTargetIndex", "firstCh", "_getTargetPixel", "_getTargetValue", "fillOption", "_buildStackLine", "sourcePoints", "linesBelow", "getLinesBelow", "addPointsBelow", "below", "unshift", "sourcePoint", "postponed", "findPoint", "pointValue", "firstValue", "lastValue", "simpleArc", "_getTarget", "getLineByIndex", "computeBoundary", "computeCircularBoundary", "computeLinearBoundary", "_drawfill", "lineOpts", "above", "doFill", "fillColor", "clipVertical", "clipHorizontal", "clipY", "lineLoop", "clipX", "src", "notShape", "clipBounds", "interpolatedLineTo", "targetLoop", "interpolatedPoint", "afterDatasetsUpdate", "$filler", "beforeDraw", "drawTime", "beforeDatasetsDraw", "beforeDatasetDraw", "getBoxSize", "labelOpts", "boxHeight", "boxWidth", "usePointStyle", "pointStyleWidth", "itemHeight", "itemsEqual", "Legend", "_added", "legendHitBoxes", "_hoveredItem", "doughnutMode", "legendItems", "columnSizes", "lineWidths", "buildLabels", "labelFont", "_computeTitleHeight", "_fitRows", "_fitCols", "hitboxes", "totalHeight", "row", "itemWidth", "measureText", "_itemHeight", "heightLimit", "totalWidth", "currentColWidth", "currentColHeight", "col", "calculateItemSize", "adjustHitBoxes", "rtl", "rtlHelper", "getRtlAdapter", "hitbox", "leftForLtr", "_draw", "defaultColor", "halfFontSize", "cursor", "drawLegendBox", "lineDash", "drawOptions", "SQRT2", "xPlus", "drawPointLegend", "yBoxTop", "xBoxLeft", "fillText", "strikethrough", "overrideTextDirection", "textDirection", "textWidth", "setWidth", "realX", "_textX", "fontLineHeight", "calculateLegendItemHeight", "restoreTextDirection", "titleFont", "titlePadding", "topPaddingPlusHalfFontSize", "_getLegendItemAt", "hitBox", "lh", "handleEvent", "isListened", "hoveredItem", "sameItem", "onLeave", "calculateItemWidth", "calculateItemHeight", "legendItemText", "plugin_legend", "_element", "afterEvent", "ci", "useBorderRadius", "Title", "_padding", "textSize", "_drawArgs", "fontOpts", "createTitle", "titleBlock", "plugin_title", "WeakMap", "plugin_subtitle", "positioners", "average", "xSet", "eventPosition", "nearestElement", "distanceBetweenPoints", "tp", "pushOrConcat", "toPush", "apply", "splitNewlines", "str", "String", "createTooltipItem", "formattedValue", "getTooltipSize", "tooltip", "body", "footer", "bodyFont", "footerFont", "titleLineCount", "footerLineCount", "bodyLineItemCount", "combinedBodyLength", "bodyItem", "before", "lines", "after", "beforeBody", "afterBody", "titleSpacing", "titleMarginBottom", "bodyLineHeight", "displayColors", "bodySpacing", "footerMarginTop", "footerSpacing", "widthPadding", "maxLineWidth", "determineYAlign", "doesNotFitWithAlign", "xAlign", "caret", "caretSize", "caretPadding", "determineXAlign", "yAlign", "chartWidth", "determineAlignment", "alignX", "alignY", "paddingAndSize", "getBackgroundPoint", "alignment", "cornerRadius", "getAlignedX", "getBeforeAfterBodyLines", "createTooltipContext", "tooltipItems", "overrideCallbacks", "defaultCallbacks", "beforeTitle", "noop", "labelCount", "afterTitle", "beforeLabel", "tooltipItem", "labelColor", "labelTextColor", "bodyColor", "labelPointStyle", "afterLabel", "beforeFooter", "afterFooter", "invokeCallbackWithFallback", "Tooltip", "opacity", "_eventPosition", "_size", "_cachedAnimations", "_tooltipItems", "dataPoints", "caretX", "caretY", "labelColors", "labelPointStyles", "labelTextColors", "getTitle", "getBeforeBody", "getBody", "bodyItems", "scoped", "getAfterBody", "getFooter", "_createItems", "itemSort", "positionAndSize", "backgroundPoint", "external", "drawCaret", "tooltipPoint", "caretPosition", "getCaretPosition", "x3", "y3", "ptX", "ptY", "pt", "titleColor", "_drawColorBox", "colorX", "rtlColorX", "yOffSet", "colorY", "multiKeyBackground", "outerX", "innerX", "strokeRect", "drawBody", "bodyAlign", "xLinePadding", "fillLineOfText", "bodyAlignForCalculation", "textColor", "drawFooter", "footerAlign", "footerColor", "tooltipSize", "quadraticCurveTo", "_updateAnimationTarget", "animX", "animY", "_willRender", "hasTooltipContent", "globalAlpha", "positionChanged", "_positionChanged", "_ignoreReplayEvents", "plugin_tooltip", "afterInit", "afterDraw", "_fallback", "addIfString", "addedLabels", "findOrAddLabel", "lastIndexOf", "_getLabelForValue", "CategoryScale", "_startValue", "_valueRange", "_addedLabels", "added", "generateTicks", "generationOptions", "dataRange", "precision", "maxTicks", "maxDigits", "includeBounds", "unit", "maxSpaces", "rmin", "rmax", "countDefined", "minSpacing", "niceNum", "niceMin", "niceMax", "numSpaces", "MIN_SPACING", "almostWhole", "almostEquals", "decimalPlaces", "_decimalPlaces", "relativeLabelSize", "tickValue", "rad", "LinearScaleBase", "_endValue", "handleTickRangeOptions", "setMin", "setMax", "minSign", "maxSign", "getTickLimit", "stepSize", "computeTickLimit", "numericGeneratorOptions", "_setMinAndMaxByKey", "LinearScale", "Ticks", "formatters", "numeric", "log10Floor", "log10", "changeExponent", "m", "isMajor", "tickVal", "steps", "rangeExp", "rangeStep", "startExp", "minExp", "exp", "significand", "lastTick", "LogarithmicScale", "logarithmic", "_zero", "getTickBackdropHeight", "measureLabelSize", "_longestText", "determineLimits", "fitWithPointLabels", "limits", "valueCount", "_pointLabels", "pointLabelOpts", "additionalAngle", "centerPointLabels", "getPointLabelContext", "getPointPosition", "drawingArea", "plFont", "hLimits", "vLimits", "updateLimits", "setCenterPoint", "_pointLabelItems", "buildPointLabelItems", "createPointLabelItem", "itemOpts", "outerDistance", "extra", "pointLabelPosition", "yForAngle", "getTextAlignForAngle", "leftForTextAlign", "isNotOverlapped", "drawPointLabelBox", "backdropLeft", "backdropTop", "backdropWidth", "backdropHeight", "drawPointLabels", "pathRadiusLine", "drawRadiusLine", "gridLineOpts", "createPointLabelContext", "RadialLinearScale", "animate", "leftMovement", "rightMovement", "topMovement", "bottomMovement", "angleMultiplier", "scalingFactor", "getValueForDistanceFromCenter", "scaledDistance", "pointLabel", "distanceFromCenter", "getBasePosition", "getPointLabelPosition", "rotate", "INTERVALS", "millisecond", "common", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "UNITS", "sorter", "input", "adapter", "_adapter", "parser", "isoWeekday", "_parseOpts", "determineUnitForAutoTicks", "minUnit", "capacity", "interval", "MAX_SAFE_INTEGER", "determineUnitForFormatting", "determineMajorUnit", "addTick", "time", "timestamps", "_lookup", "timestamp", "setMajorTicks", "majorUnit", "ticksFromTimestamps", "TimeScale", "displayFormats", "_unit", "_majorUnit", "_offsets", "_normalized", "normalized", "_applyBounds", "_getLabelBounds", "getLabelTimestamps", "timeOpts", "_generate", "_filterBetween", "_getLabelCapacity", "initOffsets", "offsetAfterAutoskip", "getDecimalForValue", "minor", "weekday", "hasWeekday", "getDataTimestamps", "tooltipFormat", "datetime", "fmt", "_tickFormatFunction", "formatter", "minorFormat", "majorFormat", "offsets", "_getLabelSize", "ticksOpts", "tickLabelWidth", "cosRotation", "sinRotation", "tickFontSize", "exampleTime", "exampleLabel", "normalize", "table", "prevSource", "nextSource", "prevTarget", "nextTarget", "span", "TimeSeriesScale", "_table", "_minPos", "_tableRange", "_getTimestampsForTable", "buildLookupTable", "registerables", "Chart", "registerables", "chart", "chartConfig", "Chart", "clock", "started", "hours", "minutes", "seconds", "secondsMinusHours", "hoursSeconds", "minutesSeconds", "remainingSeconds", "companyLogoUploadPreview", "imageUrl", "imgUrl", "import_sweetalert2", "confirmButton", "swalOptions", "eventName", "Swal", "isConfirmed", "dailyTimeline", "HOOKS", "defaults", "err", "givenDate", "date", "week1", "english", "nth", "s", "default_default", "pad", "number", "length", "int", "bool", "debounce", "fn", "wait", "_this", "args", "arrayify", "obj", "toggleClass", "elem", "className", "bool", "createElement", "tag", "content", "e", "clearNode", "node", "findParent", "condition", "createNumberInput", "inputClassName", "opts", "wrapper", "numInput", "arrowUp", "arrowDown", "key", "getEventTarget", "event", "path", "doNothing", "monthToStr", "monthNumber", "shorthand", "locale", "revFormat", "dateObj", "monthName", "hour", "day", "amPM", "int", "shortMonth", "seconds", "_", "unixSeconds", "weekNum", "weekNumber", "date", "year", "ISODate", "minutes", "month", "unixMillSeconds", "tokenRegex", "formats", "options", "pad", "createDateFormatter", "_a", "_b", "config", "defaults", "_c", "l10n", "english", "_d", "isMobile", "dateObj", "frmt", "overrideLocale", "locale", "c", "i", "arr", "formats", "createDateParser", "date", "givenFormat", "timeless", "customLocale", "parsedDate", "dateOrig", "format", "datestr", "matched", "ops", "matchIndex", "regexStr", "token", "isBackSlash", "escaped", "tokenRegex", "match", "revFormat", "fn", "val", "compareDates", "date1", "date2", "isBetween", "ts", "ts1", "ts2", "calculateSecondsSinceMidnight", "hours", "minutes", "seconds", "parseSeconds", "secondsSinceMidnight", "duration", "getDefaultHours", "config", "minHour", "minMinutes", "minSeconds", "maxHr", "maxMinutes", "target", "args", "_i", "_loop_1", "source", "key", "_a", "args_1", "__assign", "t", "s", "i", "n", "p", "__spreadArrays", "il", "r", "k", "a", "j", "jl", "DEBOUNCED_CHANGE_MS", "FlatpickrInstance", "element", "instanceConfig", "self", "defaults", "flatpickr", "default_default", "createDateParser", "bind", "setHoursFromDate", "positionCalendar", "changeMonth", "changeYear", "clear", "close", "onMouseOver", "createElement", "createDay", "destroy", "isEnabled", "jumpToDate", "updateValue", "open", "redraw", "set", "setDate", "toggle", "setupHelperFunctions", "month", "yr", "init", "parseConfig", "setupLocale", "setupInputs", "setupDates", "build", "bindEvents", "setCalendarWidth", "isSafari", "triggerEvent", "getClosestActiveElement", "_a", "bindToInstance", "fn", "config", "daysWidth", "updateTime", "e", "defaultDate", "compareDates", "getDefaultHours", "timeWrapper", "prevValue", "setHoursFromInputs", "ampm2military", "hour", "amPM", "int", "military2ampm", "hours", "minutes", "seconds", "limitMinHours", "limitMaxHours", "minBound", "calculateSecondsSinceMidnight", "maxBound", "currentTime", "result", "parseSeconds", "maxTime", "minTime", "setHours", "dateObj", "date", "pad", "onYearInput", "event", "eventTarget", "getEventTarget", "year", "handler", "options", "ev", "el", "triggerChange", "evt", "setupMobile", "debouncedResize", "debounce", "onResize", "onKeyDown", "documentClick", "onMonthNavClick", "selectDate", "selText", "timeIncrement", "onBlur", "jumpDate", "jumpTo", "oldYear", "oldMonth", "buildMonthSwitch", "incrementNumInput", "delta", "inputElem", "target", "input", "createEvent", "fragment", "buildMonthNav", "buildWeeks", "weekWrapper", "weekNumbers", "buildWeekdays", "buildDays", "buildTime", "toggleClass", "customAppend", "wrapper", "className", "_dayNumber", "dateIsEnabled", "dayElement", "isDateSelected", "isDateInRange", "focusOnDayElem", "targetNode", "getFirstAvailableDay", "startMonth", "endMonth", "m", "startIndex", "endIndex", "c", "getNextAvailableDay", "current", "givenMonth", "loopDelta", "numMonthDays", "focusOnDay", "offset", "activeElement", "dayFocused", "isInView", "startElem", "buildMonthDays", "firstOfMonth", "prevMonthDays", "daysInMonth", "days", "isMultiMonth", "prevMonthDayClass", "nextMonthDayClass", "dayNumber", "dayIndex", "dayNum", "dayContainer", "clearNode", "frag", "d", "shouldBuildMonth", "monthToStr", "buildMonth", "container", "monthNavFragment", "monthElement", "selectedMonth", "yearInput", "createNumberInput", "yearElement", "currentMonth", "buildMonths", "bool", "updateNavigationCurrentMonth", "separator", "hourInput", "minuteInput", "secondInput", "updateWeekdays", "firstDayOfWeek", "weekdays", "value", "isOffset", "triggerChangeEvent", "toInitial", "isCalendarElem", "elem", "eventTarget_1", "isCalendarElement", "isInput", "lostFocus", "isIgnored", "newYear", "newYearNum", "isNewYear", "timeless", "dateToCheck", "array", "parsed", "valueChanged", "getDateStr", "allowInput", "allowKeydown", "allowInlineKeydown", "isTimeObj", "focusAndClose", "delta_1", "elems", "x", "cellClass", "hoverDate", "initialDate", "rangeStartDate", "rangeEndDate", "containsDisabled", "minRange", "maxRange", "duration", "hoverableCells", "dayElem", "timestamp", "outOfRange", "isBetween", "positionElement", "wasOpen", "minMaxDateSetter", "type", "inverseDateObj", "boolOpts", "userConfig", "formats", "dates", "parseDateRules", "timeMode", "defaultDateFormat", "defaultAltFormat", "minMaxTimeSetter", "val", "HOOKS", "hook", "arrayify", "pluginConf", "key", "getInputElem", "tokenRegex", "createDateFormatter", "customPositionElement", "calendarHeight", "acc", "child", "calendarWidth", "configPos", "configPosVertical", "configPosHorizontal", "inputBounds", "distanceFromBottom", "showOnTop", "top", "left", "isCenter", "isRight", "right", "rightMost", "centerMost", "doc", "getDocumentStyleSheet", "bodyWidth", "centerLeft", "centerBefore", "centerAfter", "centerIndex", "centerStyle", "editableSheet", "sheet", "createStyleSheet", "style", "isSelectable", "day", "findParent", "selectedDate", "shouldChangeMonth", "selectedIndex", "b", "single", "range", "CALLBACKS", "updatePositionElement", "option", "setSelectedDate", "inputDate", "format", "arr", "rule", "preloadedDate", "inputType", "data", "hooks", "name", "specificFormat", "dObj", "isPrevMonth", "isNextMonth", "isKeyDown", "min", "max", "step", "curValue", "newValue", "isHourElem", "isMinuteElem", "_flatpickr", "nodeList", "nodes", "instances", "node", "selector", "l10n", "esm_default", "dateTimePicker", "enableTime", "options", "esm_default", "EXP_LIMIT", "MAX_DIGITS", "NUMERALS", "LN10", "PI", "DEFAULTS", "inexact", "quadrant", "external", "decimalError", "invalidArgument", "precisionLimitExceeded", "cryptoUnavailable", "tag", "mathfloor", "mathpow", "isBinary", "isHex", "isOctal", "isDecimal", "BASE", "LOG_BASE", "MAX_SAFE_INTEGER", "LN10_PRECISION", "PI_PRECISION", "P", "x", "finalise", "min", "max", "k", "Ctor", "y", "i", "j", "xdL", "ydL", "xd", "yd", "xs", "ys", "pr", "rm", "cosine", "toLessThanHalfPi", "e", "m", "n", "r", "rep", "s", "sd", "t", "t3", "t3plusx", "digitsToString", "divide", "w", "d", "len", "one", "tinyPow", "taylorSeries", "cosh2_x", "d8", "sinh2_x", "d5", "d16", "d20", "getPi", "wpr", "xsd", "halfPi", "px", "x2", "base", "isBase10", "denominator", "inf", "num", "arg", "guard", "naturalLogarithm", "getLn10", "checkRoundingDigits", "xe", "xLTy", "getBase10Exponent", "q", "naturalExponential", "carry", "z", "getPrecision", "sine", "rL", "toStringBinary", "dp", "checkInt32", "str", "finiteToString", "maxD", "d0", "d1", "d2", "n0", "n1", "yn", "intPow", "ws", "indexOfLastWord", "getZeroString", "repeating", "di", "rd", "convertBase", "baseIn", "baseOut", "arr", "arrL", "strL", "cos2x", "multiplyInteger", "temp", "compare", "a", "b", "aL", "bL", "subtract", "cmp", "logBase", "more", "prod", "prodL", "qd", "rem", "remL", "rem0", "xi", "xL", "yd0", "yL", "yz", "sign", "isTruncated", "digits", "roundUp", "xdi", "out", "isExp", "nonFiniteToString", "zs", "truncate", "isOdd", "maxOrMin", "args", "pow", "sum", "c", "c0", "numerator", "x1", "parseDecimal", "parseOther", "divisor", "isFloat", "p", "Decimal", "sin2_x", "isHyperbolic", "u", "isNeg", "pi", "abs", "acos", "acosh", "add", "asin", "asinh", "atan", "atanh", "atan2", "cbrt", "ceil", "clamp", "config", "obj", "v", "useDefaults", "ps", "cos", "cosh", "clone", "isDecimalInstance", "div", "exp", "floor", "hypot", "ln", "log", "log10", "log2", "mod", "mul", "random", "round", "sin", "sinh", "sqrt", "sub", "tan", "tanh", "trunc", "decimal_default", "getCookie", "name", "cookieValue", "cookies", "cookie", "amountToMinor", "amount", "currencyScale", "decimalValue", "decimal_default", "factor", "formatTime", "seconds", "useShorthand", "hours", "remainingSeconds", "minutes", "hourString", "minuteString", "INITIAL_LINE_ITEM", "amountAsMoney", "amount", "currency", "scale", "asMinor", "amountToMinor", "getFormattedAmount", "documentForm", "lineItems", "lineItemErrors", "clientTaxRates", "item", "rate", "decimal_default", "qty", "prev", "curr", "subTotal", "percentage", "totalAfterTax", "evt", "newItem", "lineItem", "existingItem", "timeEntryIdx", "lineItemIdx", "entry", "documentFormLineItemSelector", "lineItem", "documentList", "selectTimeEntriesLineItems", "lineItems", "entryId", "entryData", "existingItem", "item", "timeEntryLine", "decimal_default", "lineItem", "result", "acc", "cur", "importTimeEntriesModal", "checked", "entriesToImport", "totalSeconds", "id", "entry", "e", "formatTime", "entryId", "startedAt", "projectId", "projectName", "notes", "seconds", "invoiceForm", "clientSelect", "currencySelect", "item", "errors", "data", "evt", "description", "quantity", "rate", "units", "itemType", "projectId", "lineItem", "decimal_default", "el", "id", "startedAt", "projectName", "notes", "seconds", "entry", "client", "taxRate", "projectIds", "p", "index", "entryIds", "e", "sub", "discountAmount", "subAfterDiscount", "tax", "noteId", "selected", "n", "event", "file", "f", "amount", "minorAmount", "amountToMinor", "bytes", "k", "sizes", "entryIndex", "totalSeconds", "sum", "formatTime", "entries", "groupedByProject", "acc", "timeEntries", "existingItem", "projectData", "useShorthand", "dt", "newCount", "managementForm", "modal", "asyncGeneratorStep", "t", "e", "r", "o", "a", "c", "i", "u", "n", "_asyncToGenerator", "_next", "_throw", "_defineProperty", "_toPropertyKey", "ownKeys", "_objectSpread2", "_objectWithoutProperties", "_objectWithoutPropertiesLoose", "s", "_regeneratorRuntime", "define", "wrap", "Generator", "Context", "makeInvokeMethod", "tryCatch", "h", "l", "f", "GeneratorFunction", "GeneratorFunctionPrototype", "p", "d", "v", "values", "g", "defineIteratorMethods", "AsyncIterator", "invoke", "callInvokeWithMethodAndArg", "maybeInvokeDelegate", "pushTryEntry", "resetTryEntry", "next", "handle", "_toPrimitive", "Versions", "DefaultVersion", "PaddleClassicCDNUrl", "PaddleBillingCDNUrl", "PaddleClassicInfo", "PaddleBillingV1Info", "findScript", "cdnUrl", "injectScript", "src", "script", "headOrBody", "promiseMap", "VersionToPaddleMap", "loadFromCDN", "version", "_getCDNInfoBasedOnVer", "getCDNInfoBasedOnVersion", "existingPromise", "paddleInstanceName", "resolve", "reject", "error", "_excluded", "_excluded2", "initializePaddleBillingV1", "options", "paddle", "environment", "rest", "initializePaddleClassic", "CheckoutEventNames", "CheckoutEventsTimePeriodInterval", "CheckoutEventsPaymentMethodTypes", "CheckoutEventsPaymentMethodCardTypes", "CheckoutEventsStatus", "initializePaddle", "_x", "_initializePaddle", "_callee", "requestedVersion", "_context", "paddleCheckout", "transactionId", "customerId", "paddleToken", "successUrl", "environment", "initializePaddle", "paddle", "projectTimeEntries", "entryIds", "entry", "id", "switchBtn", "model", "taskForm", "project", "billingType", "timesheet", "date", "options", "startOfWeek", "day", "diff", "endOfWeek", "startMonth", "endMonth", "startTime", "hours", "minutes", "endTime", "startHours", "startMinutes", "endHours", "endMinutes", "startMinutesSinceMidnight", "timesheetDatePicker", "esm_default", "selectedDates", "dateStr", "instance", "url", "timesheetsForm", "task", "module_default", "evt", "getCookie", "Swal", "companyLogoUploadPreview", "confirmButton", "documentList", "taskForm", "timesheetsForm", "documentForm", "documentFormLineItemSelector", "clock", "chart", "modal", "paddleCheckout", "timesheet", "timesheetDatePicker", "dateTimePicker", "dailyTimeline", "projectTimeEntries", "switchBtn", "selectTimeEntriesLineItems", "bulkAddTimeEntries", "invoiceForm", "importTimeEntriesModal"]
}
